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

时间:2014-11-26 11:00:42

标签: 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;
}

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

2 个答案:

答案 0 :(得分:5)

我的建议,请转到fgets()

  1. 从输入
  2. 中读取整个line
  3. 使用空格[] [或您首选的分隔符] [使用strtok()]
  4. 进行标记
  5. 分配内存以存储整数
  6. 将字符串输入转换为整数[也许strtol()]并存储每个整数。
  7. 或者,您可能需要添加一些验证和错误检查。

    详细了解fgets() here

    也不要忘记\n

    去除存储在读缓冲区中的尾随fgets()

答案 1 :(得分:0)

根据Sourav Ghosh

的建议推荐使用fgets()

否则代码可以在阅读每个'\n'

之前搜索int
#include <ctype.h>
#include <stdio.h>
#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;
}