C.由于用户输入字母而不是数字而打印错误消息

时间:2013-05-08 06:20:53

标签: c custom-errors

用户必须输入大于0的数字才能打印一些东西。

当用户输入小于0的数字时,我的代码使用while循环。然后它要求用户再次输入一个数字。

while(x<=0){
  print("Must enter a number greater than 0");
  printf("Enter a number: ");
  scanf("%i",&x);}

如何创建与上述格式类似的错误消息,但对于输入“x”或单词的用户。感谢

2 个答案:

答案 0 :(得分:2)

由于使用数字格式的scanf进行读取,这意味着如果输入的内容无法读取为整数(123)或整数的一部分({{ 1}}没问题,解析在3)之后很快停止,scanf失败(即它不能将输入解析为数字)。 Scanf返回成功解析的项目数。所以你希望你的情况是1。您可以检查返回值(如果它为0,则scanf无法从输入中获取任何数字),但如前所述,您仍然接受像123x这样的thigs(并且“残差”x将在来自stdin的下一个scanf,如果你这样做的话)。

答案 1 :(得分:0)

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main(void){
    int x;
    int ok=0;

    do{
        char buff[32], *endp;
        long long num;

        ok = !ok;//start true(OK)
        printf("Enter a number: ");
        fgets(buff, sizeof(buff), stdin);
        x=(int)(num=strtoll(buff, &endp, 0));//0: number literal of C. 10 : decimal number.
        if(*endp != '\n'){
            if(*endp == '\0'){
                printf("Too large!\n");
                fflush(stdin);
            } else {
                printf("Character that can't be interpreted as a number has been entered.\n");
                printf("%s", buff);
                printf("%*s^\n", (int)(endp - buff), "");
            }
            ok = !ok;
        } else if(num > INT_MAX){
            printf("Too large!\n");
            ok = !ok;
        } else if(x<=0){
            printf("Must enter a number greater than 0.\n\n");
            ok = !ok;
        }
    }while(!ok);

    printf("your input number is %d.\n", x);
    return 0;
}