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

use*_*573 3 c scanf

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

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

第二输入:2 4 5

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

像这样的东西

#include <stdio.h>

int main(){
int myarray[20];
int i=0, data;

while(1){
      scanf("%d", &data);
      if (data == '\n') break; 
      myarray[i]=data;
}

return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

Sou*_*osh 5

我的建议,去吧fgets().

  1. line从输入中读取整体
  2. 使用space [ ] [or your preferred delimiter] [using strtok()] 进行标记
  3. 分配内存以存储整数
  4. 将字符串输入转换为整数[也许strtol()]并存储每个整数.

或者,您可能希望添加一些验证和错误检查.

了解更多关于fgets() 这里.

另外,不要忘记摆脱\n存储在读缓冲区中的尾随fgets()