当我输入字符串而不是整数时,我在此代码中遇到问题。如何检查用户是否输入了字符而不是整数? (我想向用户发出一条消息,说你应该使用数字,而不是字符)
另外:如果您在此代码中发现任何内容我可以改进,请帮助我! (我是C的新手)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main () {
int secret, answer;
srand((unsigned)time(NULL));
secret = rand() % 10 + 1;
do {
printf ("Guess a number between 1 and 10");
scanf ("%d",&answer);
if (secret<answer) puts ("Guess a higher value");
else if (secret>answer) puts ("Guess a lower value");
} while (secret!=answer);
puts ("Congratz!");
return 0;
}
答案 0 :(得分:4)
scanf返回找到的匹配数。在您的情况下,如果它读取一个数字,它将返回1
。 0
如果无法读取数字:
if(scanf ("%d",&answer) != 1){
puts("Please input a number");
// Now read in the rest of stdin and throw it away.
char ch;
while ((ch = getchar()) != '\n' && ch != EOF);
// Skip to the next iteration of the do while loop
continue;
}
答案 1 :(得分:3)
将输入作为字符串(char[]
和%s
)阅读,检查所有字符是否为isdigit()
个数字(可能允许'+'
或{{1} }作为第一个字符)并使用'-'
转换为atoi()
。
答案 2 :(得分:0)
当且仅当字符串中的每个字符都是数字时,你应该编写一个返回true的函数,否则返回false。
char * in_str;
int answer;
...
sscanf("%s", in_str);
if (!is_number(in_str)) {
printf("Please put in a number, not a letter");
} else {
answer = atoi(in_str);
}
...
您需要实施is_number
功能
答案 3 :(得分:0)
由于您不能假设用户的输入是整数,因此请scanf()
接受字符串。然后尝试使用strtol()
转换该字符串;如果输入不是整数,则返回0
。
答案 4 :(得分:0)
使用fgets
将输入作为字符串读取,然后使用strtol
检查输入。与strtol
相反的atoi
能够进行错误检查。