c程序中的运行时错误

c程序中的运行时错误,c,C,下面的代码给出了运行时错误,我就是找不到代码中的错误。那么,如果有人可以帮助我 #include<stdio.h> int main() { int a = 0; while(1){ scanf("%d",&a); if(a==42) break; printf("%d\n",a); } return 0; } 如果要扫描用户输入,直到按下有效输入,可以使用以下代码

下面的代码给出了运行时错误,我就是找不到代码中的错误。那么,如果有人可以帮助我

#include<stdio.h>
int main() {
    int a = 0;
    while(1){
        scanf("%d",&a);
        if(a==42)
            break;  
        printf("%d\n",a);

    }
    return 0;
}

如果要扫描用户输入,直到按下有效输入,可以使用以下代码:

#include <stdio.h>

int main() {
    char a = 0;
    while(1){
        scanf("%c",&a);
        if(a==42)
            break;  
        printf("%d\n",a);
    }
    return 0;
}
此代码不挂起任何输入,但它会逐个字符地处理输入,因此您可能会在控制台上看到类似10的内容,因为您需要输入。为了结束这个程序,如果我们使用ascii编码,有效的用户输入是*

正如您在scanf中看到的:

成功时,这些函数返回输入项目的数量 成功匹配和分配;这可能比提供的要少 如果早期匹配失败,则为,甚至为零


它将返回成功匹配的输入数,以便您可以检查此值,以确保您的代码在输入缓冲区上取得进展。

使用调试器的时间到了。void main是一个非法的签名。我可以看到这个程序如何挂起无效的输入,但我不确定它会如何崩溃。void main{->int mainvoid{….返回0;如果scanf发现它无法处理的输入,例如abc,当它需要一个数字时,输入仍保留在缓冲区中,并且scanf的头一直撞在墙上。请测试scanf的返回值。它会告诉您扫描了多少个项目。显示您的输入。这意味着如果ASCII编码必须键入*以结束程序,用户将无法处理@风向标谢谢你们的提醒,我在回答中补充道。