我不完全确定这是您要查找的内容,但如果您的问题是如何使用 <stdio.h> 读取整数,那么正确的语法是
int myInt;
scanf("%d", &myInt);
当然,您需要进行大量错误处理以确保其正常工作,但这应该是一个好的开始。特别是,您需要处理
-
stdin 文件已关闭或损坏,因此您什么也得不到。
- 用户输入的内容无效。
要检查这一点,您可以像这样从scanf 捕获返回码:
int result = scanf("%d", &myInt);
如果stdin在读取时遇到错误,result将是EOF,您可以像这样检查错误:
int myInt;
int result = scanf("%d", &myInt);
if (result == EOF) {
/* ... you're not going to get any input ... */
}
另一方面,如果用户输入了无效的内容,例如垃圾文本字符串,那么您需要从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
;
}
希望这会有所帮助!
编辑:针对更详细的问题,这里有一个更合适的答案。 :-)
这段代码的问题是当你写的时候
printf("got the number: %d", scanf("%d", &x));
这是从scanf 打印返回码,在流错误时为EOF,如果没有读取任何内容,则为0,否则为1。这意味着,特别是,如果您输入一个整数,这将始终打印 1,因为您打印的是来自 scanf 的状态代码,而不是您读取的数字。
要解决此问题,请将其更改为
int x;
scanf("%d", &x);
/* ... error checking as above ... */
printf("got the number: %d", x);
希望这会有所帮助!