c - 在不知道整数的实际个数的情况下扫描多个整数

标签 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 会跳过所有特殊字符并只查找整数...有没有一种方法可以将整数扫描到数组中,当有换行符时它会停止?

最佳答案

我的建议是使用 fgets()

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

可选地,您可能想要添加一些验证和错误检查。

阅读更多关于 fgets() here .

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

关于c - 在不知道整数的实际个数的情况下扫描多个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27147393/

相关文章:

c - 为什么 scanf 被执行了 11 次?

c - 如何防止scanf导致C语言缓冲区溢出?

c - printf 在 scanf 之后不打印?

C 信号。信号()与信号集()?

c++ - 如何在 Linux 上将波特率设置为 307,200?

c++ - 如何在使用 dirent.h 阅读时跳过目录

c - 在 C 中使用 OpenSSL 时 EVP_CIPHER_CTX_new() 中的段错误

无法使用 sscanf 分隔字符串?

c - 解析字符数组时出现段错误

c - Scanf 函数在查找 %d 匹配项时是否忽略 Enter 键?