3

当我输入一个字符串而不是整数时,这段代码有问题。如何检查用户是否输入了字符而不是整数?(我想向用户发出一条消息,说您应该使用数字,而不是字符)

另外:如果您在此代码中发现任何我可以改进的地方,请帮助我!(我是 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;
}
4

5 回答 5

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;
}
于 2012-06-15T20:42:56.200 回答
3

将输入读取为字符串 ( char[]and %s),检查所有字符是否为 ( isdigit()) 数字(可能允许使用'+'or'-'作为第一个字符)并用于atoi()转换为int.

于 2012-06-15T20:41:18.063 回答
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功能

于 2012-06-15T20:39:21.670 回答
0

由于您不能假设用户的输入是整数,因此请scanf()接受一个字符串。然后尝试用strtol();转换该字符串 0如果输入不是整数,它将返回。

于 2012-06-15T20:42:29.767 回答
0

将输入作为字符串读取fgets,然后用于strtol检查输入。 strtol相反atoi能够进行错误检查。

于 2012-06-15T20:42:48.533 回答