getchar() 会导致错误,而 scanf 不会

getchar() causes error while scanf don't

#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

两者都是未定义的行为,因为 main 应该 return int 按照 C 标准的定义。当您检查其 return 代码时,这一点尤为重要。

将定义更改为:

int main(void)
{
    ...
}

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

您的 main() 应该 returns int 而不是 void 正如其在 n1570 标准

中指定的那样

It shall be defined with a return type of int and with no parameters: int main(void) { /* ... */ }

将错误代码块替换为

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