c/c++语言开发共享使用scanf读取空格分隔的数字并将它们存储在数组中 – C

我正在尝试使用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通常是缓冲的,因此stdinscanf()在按下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

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐