C++ 在循环中输入数据
我想按格式“%d:%c”输入数据 我有这个:C++ 在循环中输入数据,c++,c,C++,C,我想按格式“%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); } } 但我的程序是这样
#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);
}
}
但我的程序是这样做的:
a:1
a:1
b:2
:1
b:2
--------------------------------
Process exited with return value 0
Press any key to continue . . .
这里的问题是什么?这是因为当您使用
scanf
读取输入时,输入字符仍留在缓冲区中,因此您下次调用scanf
时,会将其读取为字符
通过告诉scanfscanf
跳过空白,在格式代码中添加一个空格,可以很容易地解决这个问题,如
scanf(" %c:%d", &letter, &number);
/* ^ */
/* | */
/* Notice leading space */
这是因为当您使用
scanf
读取输入时,回车字符仍保留在缓冲区中,因此您下次调用scanf
时,会将其读取为字符
通过告诉scanfscanf
跳过空白,在格式代码中添加一个空格,可以很容易地解决这个问题,如
scanf(" %c:%d", &letter, &number);
/* ^ */
/* | */
/* Notice leading space */
这可能会有帮助。在scanf()函数中的%d之后使用%c会导致这样的困难
简而言之,您在给出第一个测试用例的数字输入后输入的“\n”将作为第二个测试用例的字符输入
为了避免这种情况,您可以将scanf
语句编辑为scanf(“%c:%d”,…)代码>。%c之前的前导空格可避免将所有这些'\n'输入作为字符。这可能会有所帮助。在scanf()函数中的%d之后使用%c会导致这样的困难
简而言之,您在给出第一个测试用例的数字输入后输入的“\n”将作为第二个测试用例的字符输入
为了避免这种情况,您可以将scanf
语句编辑为scanf(“%c:%d”,…)代码>。%c之前的前导空格避免将所有这些'\n'输入作为字符。OP说“…按格式“%d:%c”输入数据,但代码使用%c:%d”
,数据输入意味着“char”然后是“number”
建议:
1) 确定所需的顺序
2) 在“%c”
之前使用空格,如在“%c”
中使用前导空格,如前一行的Enter(或'\n'
)。OP说“。。。按格式“%d:%c”输入数据,但代码使用“%c:%d”
,数据输入意味着“char”然后是“number”
建议:
1) 确定所需的顺序
2) 在%c”
之前使用空格,如在%c”
中使用前导空格,如前一行的Enter(或'\n'
)。是否尝试在扫描框中添加\n
?是否尝试在扫描框中添加\n
?