C语言while循环后,while循环之后的FOR 循环为什么运行不了??

#include<stdio.h>
#include<string.h>
int main(void)
{
int arr[100];
int i=0;
while(scanf("%d",&arr[i++])!=EOF)
printf("%d ",arr[i-1]);

for(int j=0;j<=i;j++)
printf("%d",arr[j]);

return 0;
}

while循环执行完成后,后面的for循环不执行了 ,为什么,如何让while循环执行后,继续for循环, 比如 输入1 2 3 4; 输出 while循环1 2 3 4,再输出for循环 1 2 3 4

你可以把while循环那部分代码改一下:

int i=0, z = 0;
while((z = scanf("%d",&arr[i++]))!=EOF)
printf("[%d ][z:%d]",arr[i-1], z);

看一下scanf的返回值z到底是啥,然后你就知道为啥在里面死循环了。

scanf我用的不多,但判断scanf的返回值只能让你判断scanf这个函数是否执行成功并不能让你计数执行了多少次。

追问

Z返回值一直是1;我就想知道如何while 循环完了 到后面运行for循环

追答

关键按照你的代码while循环结束不了吧....
你运行时难道不是一直让你不停的输入scanf吗?这不就是死循环吗?
如果z的值一直是1而EOF这个宏又不等于1,那while的执行条件不是每次都能成立,不就是死循环了么,怎么跳出循环去执行下一条for语句呢

追问

那如何可以让我随意输入任意个数字,while循环完成后,再for循环输出呢??

追答

那要看你想什么时候结束while循环,有的人想输入4次后就跳出循环然后执行for;有些人想当输入的字符为10的时候跳出循环执行for;有的人想当i等于5的时候跳出循环执行for。
while不是一条语句,而是一个循环,他需要一个条件来停止循环。
你的要求呢?

追问

我的要求是随机输入100个以内的数字就行,当用户输入4个 就while循环4次跳出 进行for循环;当用户输入10个,就while循环10次跳出进行for循环;

追答#include <stdio.h>

int main(int argc, char *argv[])
{
    int arr[100] = {0};
    int i = 0;
    
    while(arr[0] >= i)
    {
        scanf("%d",&arr[i++]);
        printf("%d ",arr[i-1]);
    }
    
    int j = 0;
    for(j=0;j<=i;j++)
    {
        printf("%d",arr[j]);
    }
    
    return 0;
}

你看看这样行不行

上面这种估计不行,我估计你还是没明白啥是循环

追问

运行不对

追答

你得告诉程序一个固定的条件,不是靠你的意念去停止这个while循环。
你脑子里想着输入4个就停止或者输入第102个数字就停止,你怎么让程序能猜到你脑子里到底想要输入多少个停止?

追问

当你在程序里输入了4个数字,就是循环4次跳出,当你在程序里输入了10个,就是循环10次跳出,不是固定的;

追答

这个是逻辑思维问题,我真帮不了你,感觉你钻死胡同了。
当你输入了4个数字,电脑怎么知道你要不要输入第5个数字?
你说跳出循环就跳出?你给他指令了吗,你再用你的脑电波控制程序吗?

追问

#include

int main(void)
{
int arr[100];
char ch;
int i=0;
do
{
scanf("%d",&arr[i++]);
}
while((ch=getchar())!='\n');
for(int j=0;j<i;j++)
printf("%d ",arr[j]);
return 0;
}
这样可以了 ,还是谢谢!

追答

这么写一定意义上也可以,回车可以认为是你给电脑下的指令。
但是你要考虑到scanf不一定是空格区分的,也可以是回车区分的!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-02-25
你需要在行首输入EOF字符来结束循环。Windows下的做法是:
在第一行输入数据1 2 3 4,按回车;
在第二行按Ctrl+Z输入一个^Z字符,按回车。追问

可以不要输入^z满足要求吗

追答

不可以,因为在命令行中,行数的^Z代表EOF字符,而while循环只以EOF作为结束标记。

第2个回答  2019-02-25

#include<stdio.h>
#include<string.h>
int main(void)
{ int arr[100];
  int i=0;
  while(scanf("%d",&arr[i++])!=EOF)
    printf("%d ",arr[i-1]);

  for(int j=0; j<i-1; j++)
    printf("%d\t",arr[j]);

  return 0;
}

追问

为什么第二行要加个^Z才可以继续for循环,如何不需要继续输入^z,直接输入数组一次就行了

追答

这是你写的:

scanf("%d",&arr[i++])!=EOF

决定的。

要不改成这样:

#include<stdio.h>
int main(void)
{ int i,arr[100];
  char c;
  while(scanf("%d%c",&arr[i++],&c),c==' ')
    printf("%d ",arr[i-1]);
  printf("%d\n",arr[i-1]);
  for(int j=0; j<i; j++)
    printf("%d\t",arr[j]);
  return 0;
}

相似回答