在课堂上,我需要使用scanf
来获取要使用的整数。问题是我不知道结束while
循环。我等待代码中的'\n'
,但它正在通过所有测试。该程序必须完成评分。
当输入在输入中包含多个'\n'
并在输入末尾使用空格键时,如何使代码工作。
所有数字之间都带有空格键。
# include <stdio.h>
int main()
{
int numbers;
char ch;
int stop = 0;
while(scanf("%d%c", &numbers, &ch))
{
if((ch == '\n') stop++;
#my_code
if (stop == 1) break;
}
答案 0 :(得分:2)
while(scanf("%d%c", &numbers, &ch)) { if((ch == '\n') ....
有两个问题。
如果输入行仅具有"\n"
或" \n"
之类的空白,则scanf()
直到输入非空白后才会返回,因为所有前导空白"%d"
占用了空格。
如果在int
之后出现空格,则不会像在"\n"
中那样检测到"123 \n"
。
像int
或"123-456\n"
一样,丢弃"123x456\n"
之后的非空白。
如何结束循环?
寻找'\n'
。不要让"%d"
悄悄地消费它。
通常使用fgets()
来读取 line 可以提供更强大的代码,但坚持使用scanf()
的目的是检查{{1}的前导空白}
'\n'
测试代码
#include <ctype.h>
#include <stdio.h>
// Get one `int`, as able from a partial line.
// Return status:
// 1: Success.
// 0: Unexpected non-numeric character encountered. It remains unread.
// EOF: end of file or input error occurred.
// '\n': End of line.
// Note: no guards against overflow.
int get_int(int *dest) {
int ch;
while (isspace((ch = fgetc(stdin)))) {
if (ch == '\n') return '\n';
}
if (ch == EOF) return EOF;
ungetc(ch, stdin);
int scan_count = scanf("%d", dest);
return scan_count;
}