scanf是否在其缓冲区或输入流中放置了空格?如果我说
scanf("%c %d %d", &character, &num1, &num2);
现在说
scanf("%c", &char2);
我知道输入将保留在缓冲区但是空间计数?
scanf("%c%d%d", &character, &num1, &num2);
这与第一部分有什么不同。
还有一件事。用户按下后,我可以以某种方式打破scanf。如果它在num1之后按下输入为ex。输入:i 5
即使它还在等待一次输入,我能否以某种方式使scanf在此之后停止?
格式字符串scanf
中的空格将占用任何空格(如果有的话);格式说明符%d
也将忽略实际数字之前的任何空格。因此," %d"
与"%d"
具有相同的效果。格式说明符%c
不会忽略空格而是读取它们,因此" %c"
将与"%c"
不同。在你的情况下,%c
位于scanf("%c %d %d", ...)
格式字符串的开头,与scanf("%c%d%d", ...)
具有相同的效果。
如果你想在输入所有内容之前允许退出,我建议使用fgets
读取完整的“行”,然后相应地解析输入,例如使用sscanf
的strtok
。