scanf未知数的整数,如何结束循环?

时间:2018-10-22 20:19:49

标签: c

在课堂上,我需要使用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;
    }

1 个答案:

答案 0 :(得分:2)

while(scanf("%d%c", &numbers, &ch)) { if((ch == '\n') ....有两个问题。

  1. 如果输入行仅具有"\n"" \n"之类的空白,则scanf()直到输入非空白后才会返回,因为所有前导空白"%d"占用了空格。

  2. 如果在int之后出现空格,则不会像在"\n"中那样检测到"123 \n"

  3. 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;
}