当scanf没有时,getchar()会导致错误

时间:2018-04-15 10:46:40

标签: c scanf getchar

#include<stdio.h>
void main() {
char ch;
ch=getchar();
printf("%d",ch);
}

这给了我错误NZEC(非零退出代码)但是当我使用 -

#include<stdio.h>
void main() {
char ch;
scanf("%c",&ch);
printf("%d",ch);
}

没有执行错误并接受解决方案 getchar()有什么问题?

我对C很新,所以我不知道我检查了scanf和getchar之间差异的答案,但我无法理解。请帮助我理解这种行为。

解决方案: 我不知道我的查询与这个问题有关: What should main() return in C and C++?

此外,这两个都有效 -

#include<stdio.h>
void main() {
int ch;
ch=getchar();
printf("%d",ch);
}

char更改为int和 -

#include<stdio.h>
int main(void) {
char ch;
ch=getchar();
printf("%d",ch);
return 0;
}

void更改为int

2 个答案:

答案 0 :(得分:2)

两者都是未定义的行为,因为main应返回C标准定义的int。在检查其返回码时,这一点尤其重要。

将定义更改为:

int main(void)
{
    ...
}

请注意,由于C99main不需要显式返回任何值。就像你最后有return 0;一样。但是如果您使用的是C89,则需要明确返回值(或调用exit)。

答案 1 :(得分:1)

您的main()应该返回int而不是void正如n1570标准

中指定的那样
  

应使用返回类型int定义并且不带参数:   int main(void){/ * ... * /}

将错误代码块替换为

int  main() {
        char ch;
        ch=getchar();
        printf("%d",ch);
        return 0;
}