这有很大的麻烦......
printf("> ");
int x = getchar();
printf("got the number: %d", scanf("%d", &x));
Run Code Online (Sandbox Code Playgroud)
> 1234
got the number: 1
Run Code Online (Sandbox Code Playgroud)
tem*_*def 52
我不完全确定这是你正在寻找的,但如果你的问题是如何使用读取整数<stdio.h>
,那么正确的语法是
int myInt;
scanf("%d", &myInt);
Run Code Online (Sandbox Code Playgroud)
当然,您需要进行大量的错误处理以确保其正常工作,但这应该是一个良好的开端.特别是,您需要处理其中的案例
stdin
文件被关闭或损坏,所以你什么都得不到.要检查这一点,您可以捕获返回代码,scanf
如下所示:
int result = scanf("%d", &myInt);
Run Code Online (Sandbox Code Playgroud)
如果stdin
在阅读时遇到错误,result
将会EOF
,并且您可以检查这样的错误:
int myInt;
int result = scanf("%d", &myInt);
if (result == EOF) {
/* ... you're not going to get any input ... */
}
Run Code Online (Sandbox Code Playgroud)
另一方面,如果用户输入无效的内容(如垃圾文本字符串),则需要读取字符,stdin
直到消耗所有违规输入为止.您可以按如下方式执行此操作,使用scanf
如果未读取任何内容则返回0 的事实:
int myInt;
int result = scanf("%d", &myInt);
if (result == EOF) {
/* ... you're not going to get any input ... */
}
if (result == 0) {
while (fgetc(stdin) != '\n') // Read until a newline is found
;
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
编辑:回答更详细的问题,这是一个更合适的答案.:-)
这段代码的问题在于你写的时候
printf("got the number: %d", scanf("%d", &x));
Run Code Online (Sandbox Code Playgroud)
这是打印从返回代码scanf
,这是EOF
一个流错误,0
如果没有被读取,以及1
其他.这意味着,特别是,如果输入一个整数,这将始终打印,1
因为您打印的是状态代码scanf
,而不是您读取的数字.
要解决此问题,请将其更改为
int x;
scanf("%d", &x);
/* ... error checking as above ... */
printf("got the number: %d", x);
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!