Gcc编译器不能扫描字符并从循环中出来终止程序

Gcc编译器不能扫描字符并从循环中出来终止程序,c,gcc,C,Gcc,//mvt的代码。在此情况下,编译器不会扫描ch。ch用作循环的条件。它的初始值是“y”,如果它变为“n”,循环将中断。在此代码中,我询问用户是否要继续,然后按y或n。但不知道为什么gcc不等待扫描它。这是一个简单的代码,但我不能得到的错误 int main(){ char ch; temp=tm; ch='y'; for(i=0;ch=='y';i++){ printf("enter memory size for process %d",i+1

//mvt的代码。在此情况下,编译器不会扫描ch。ch用作循环的条件。它的初始值是“y”,如果它变为“n”,循环将中断。在此代码中,我询问用户是否要继续,然后按y或n。但不知道为什么gcc不等待扫描它。这是一个简单的代码,但我不能得到的错误

    int main(){
    char ch;
    temp=tm;
    ch='y';
    for(i=0;ch=='y';i++){
    printf("enter memory size for process %d",i+1);
    scanf("%d",&m);
    if(m<temp)
    {printf("memory allocated\n"); ms[n]=m; n++;
    temp-=ms[i];
     }
    else 
    {printf("memory not allocated\n"); }
https://stackoverflow.com/users/10404087/rishabh-sharma
    printf("do you want to continue");
    scanf("%c",&ch);
    }
    printf("total memory : %d\n",tm);
    printf("process \t occupied \n");
    for(i=0;i<n;i++)
        printf("%7d \t %8d \n",i+1,ms[i]);
    printf("total externel fregment : %d \n",temp);
    return 0;
    }
intmain(){
char ch;
温度=tm;
"y",;
for(i=0;ch='y';i++){
printf(“输入进程%d的内存大小”,i+1);
scanf(“%d”、&m);

如果(m您必须使用
flushall()
函数清除与输入流关联的所有缓冲区,并写入与输出流关联的任何缓冲区

添加:
flushall()
不是C,而是特定于供应商的扩展

另一种选择是在
%c


范例

char ch;
scanf(" %c", &ch);

你可以将代码粘贴为问题中的文本,而不是图像。使用调试器。由
scanf
读取到
ch
的内容是什么?然后你可以查找请不要发布代码的图片,只将代码作为文本发布。对于所有读者来说,草率的演示都是不礼貌的。我会阅读流的所有
char
s,直到
EO检测到F
。@alk但我认为这是额外的开销。在这种情况下,我们知道遇到的只是回车符,所以我们必须通过缓冲区直到
EOF
,因为这会增加时间复杂度。@alk:你是指EOF还是EOL(行尾)?我建议EOL比EOF更有帮助,尽管EOF不一定是错误的。