扫描多个整数而不知道实际的整数数
我必须输入其频率我不知道的值…
例如,第一次输入: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()
。
- 从输入中读取整
line
- Tokenize使用空间[
] [或您首选的分隔符] [使用
strtok()
] - 分配内存以存储整数
- 将字符串输入转换为整数[也许是
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; }