scanf只有一个字符
我需要能够检测到无关的输入并退出我的程序。scanf只有一个字符
如果我在scanf("%c", &var);
中输入一个多于一个字符的字符串,它会取第一个字母并将其存储到var中,但程序会继续。
我试着用if (scanf("%c", &var) != 1)
,但是它每次都返回1,不管输入那么它没什么区别。我知道像fgets()这样的其他函数可能更适合这个,但我被指示使用scanf()函数。
我该怎么做?
如果你只是不想你的程序等待键入 “CONIO.H”
c = getch();
OR
在scanf(“%定义的字符,使用的getch()后进入c“,& var);您可以在%c之后添加换行符\ n以吸收多余的字符。
scanf("%c\n",&in);
'getch()'不是**标准函数。它在MS-DOS'conio.h'和Unix nCurses库中有两个不同的版本。 – iBug
是的,主要目标是解决这个问题,我给了我两种方法。我没有看到这个问题! @iBug –
当读取用户输入时,scanf可以从文件或控制台获取其输入。
从控制台读取数据时,只有在添加换行符时数据才可用于程序。这意味着任何在同一行输入的内容都被读取。
想象我有一个迷宫程序,并要我选择哪个方向走....
while(!atGoalLocation()) {
printf("Which direction (f)orward (l)eft (r)ight?\n");
scanf("%c", &dir);
processDirection(dir);
}
我既可以通过迷宫进入路线为
f
l
f
r
f
f
或者它也可能是正确的,进入我的输入作为
flfrff
根据您的任务,他们可能意味着同样的事情。
如果您想要允许这些输入中的任何一个,请确保通过向scanf添加“”来吃掉空白区域。
if(scanf(" %c", &dir) == 1)
如果断行版本是要接受的唯一方法,那么你应该分开的线,然后尝试进行扫描。
char line[200];
while(fgets(line, sizeof(line), stdin) != NULL){
sscanf(line, "%c", &dir);
也为C++,我们应该使用std::cin
和std::cout
。然而,同一行上的未读字符会出现同样的复杂情况,所以我仍然会使用基于行的解析器。
std::string line;
while(std::getline(std::cin, line)){
// here we could parse the line using std::strstream to decode more complext things than a char.
dir = line[0];
'如果(scanf函数( “%C%C”,与VAR,及额外的)== 2 &&额外的!= '\ n')' – BLUEPIXY
注意,你通常要至少经过一个换行符输入的字符通常更多(除非字符是换行符)。你需要决定并解释你想要做更准确的事情。以前输入了什么?角色后面输入了什么?你确定你应该担心吗? (最后一个答案可能是'是',但你需要小心你允许和禁止的内容。) –
还要注意,一般情况下,你不应该用C和C++标记问题。选择你正在学习的语言,不要用另一个标记问题。 –