扫描多个整数而不知道实际的整数数

我必须输入其频率我不知道的值…

例如,第一次输入:1 32 54 65 6

第二输入:2 4 5

我首先想到的是,扫描值,如果新行’\ n’然后打破循环,但那不是很好,所以相反我说我使用字符,然后我的类型转换得到数字,但问题与这也是因为它扫描一个字符,如果它是一个负值,它也是一个问题;

像这样的东西

#include  int main(){ int myarray[20]; int i=0, data; while(1){ scanf("%d", &data); if (data == '\n') break; myarray[i]=data; } return 0; } 

但是,scanf会跳转所有特殊字符并仅查找整数…有没有办法将int扫描到一个数组,当有换行符时它会停止?

我的建议,去fgets()

  1. 从输入中读取整line
  2. Tokenize使用空间[ ] [或您首选的分隔符] [使用strtok() ]
  3. 分配内存以存储整数
  4. 将字符串输入转换为整数[也许是strtol() ]并存储每个整数。

或者,您可能希望添加一些validation和错误检查。

在这里阅读有关fgets()更多信息。

另外,不要忘记通过fgets()去掉存储在读缓冲区中的尾随\n

推荐使用Sourav Ghosh建议的fgets()

否则代码可以在读取每个int之前搜索'\n'

 #include  #include  #define N (20) int main(void) { int myarray[N]; int i = 0; while (1) { int ch; while (isspace(ch = fgetc(stdin)) && ch != '\n') ; if (ch == '\n' || ch == EOF) break; ungetc(ch, stdin); int data; if (scanf("%d", &data) != 1) break; // Bad data if (i < N) myarray[i++] = data; } return 0; }