我想按格式“%d:%c”
输入数据我有这个:
#include <stdio.h>
int main() {
int number;
char letter;
int i;
for(i = 0; i < 3; i ++) {
scanf("%c:%d", &letter, &number);
printf("%c:%d\n", letter, number);
}
}
我希望如此:
Input: "a:1"
Output: "a:1"
Input: "b:2"
Output: "b:2"
Input: "c:3"
Output: "c:3"
但是我的程序做了这样的事情:
a:1
a:1
b:2
:1
b:2
--------------------------------
Process exited with return value 0
Press any key to continue . . .
这里有什么问题?
答案 0 :(得分:6)
这是因为当您使用scanf
读取输入时, Enter 字符仍留在缓冲区中,因此您对scanf
的下一次调用会将其读作字符
这可以通过告诉scanf
跳过空格,通过在格式代码中添加单个空格来轻松解决,例如
scanf(" %c:%d", &letter, &number);
/* ^ */
/* | */
/* Notice leading space */
答案 1 :(得分:0)
此link可能会有所帮助。在scanf()函数中使用%c之后的%c会导致你遇到这样的困难。
简而言之,在给出第一个测试用例的数字输入后输入的'\ n'将作为第二个测试用例的字符输入。
以避免您将scanf
语句编辑为scanf(" %c:%d",...);
。 %c之前的前导空格避免将所有这些'\ n'输入作为字符。
答案 2 :(得分:0)
OP说“...按格式输入数据”%d:%c“,但代码使用"%c:%d"
,数据输入暗示”char“,然后是”number“。
建议:
1)确定所需的顺序。
2)在"%c"
之前使用" %c"
之前的空格来使用前一行 Enter (或'\n'
)之类的前导空格。