我正在尝试使用scanf()来获取包含一堆空格分隔的1-3位数字的用户输入,并将它们存储到一个int数组中,并在新行上打印每个单独的数字以进行测试,但它不起作用。 这是我到目前为止:
#include #include int main() { int sourceArr[500]; int i = 0; printf("nEnter ciphertext: n"); while (scanf("%d", &sourceArr[i++]) == 1); for (int j=0;j<500;j++) { printf("%dn", sourceArr[j]); } }
所以要求用户输入一系列数字,如下所示:
Enter ciphertext: 23 122 32
我想在sourceArr [0]中存储23,在sourceArr [1]中存储122,在sourceArr [2]中存储32,然后像这样打印每个:
23 122 32
但程序在输入输入后立即闲置,不会打印数字。
"%d"
消耗领先的空格,例如' '
和'n'
,而不仅仅是' '
。
因此,当用户输入“123 456 789” Enter时 ,再次调用scanf()
等待更多输入。 它将继续等待,直到输入的非数字数据, stdin
关闭或很少遇到IO错误。
由于stdin
通常是缓冲的,因此stdin
和scanf()
在按下Enter之前看不到任何输入。
while (scanf("%d", &sourceArr[i++]) == 1);
如果代码需要使用Enter结束输入,请使用fgets()
读取一行 。 然后使用sscanf()
或strtol()
解析它。 下面使用"%n"
来记录扫描的char
数。
char buf[100]; printf("nEnter ciphertext: n"); if (fgets(buf, sizeof buf, stdin) == NULL) Handle_EOF(); char *p = buf; int n; while (sscanf(p, "%d%n", &sourceArr[i], &n) == 1) { i++; p += n; } for (int j = 0; j < i; j++) { printf("%dn", sourceArr[j]); }
成功时, scanf返回成功填充的参数列表的项目数。 由于匹配失败,读取错误或文件结束的范围,此计数可以匹配预期的项目数或更少(甚至为零)。
您可以将其更改为:
#include #include int main() { int sourceArr[500]; int i = 0; printf("nEnter ciphertext: n"); while (scanf("%d", &sourceArr[i++]) == 1); for (int j=0;j
然后,如果输入:1 2 3 4 5 6 x(并按Enter键)
它会显示你想要的。
如果你不喜欢'x',你可以在行中使用它:
while (scanf("%d", &sourceArr[i++]) != EOF);
然后键入类似于:12 23 345 554(按Enter键)然后在窗口中键入(ctrl + z)或在unix中键入(ctrl + d)。
看到这个主题: 标准输入流(stdin)的文件结束(EOF)
ctrl + z显式使scanf返回EOF,因为控制台没有EOF,需要以这种方式发送。
以上就是c/c++开发分享使用scanf读取空格分隔的数字并将它们存储在数组中 – C相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/549384.html