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)
{
...
}
请注意,由于 C99,main
不需要明确 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;
}
#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)
{
...
}
请注意,由于 C99,main
不需要明确 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;
}