在C中禁用scanf中的数字以外的字符

时间:2012-11-25 23:46:45

标签: c char character scanf

我遇到的问题是我想禁用用户在程序中放置字符而不是数字的可能性,并可选择打印“已禁用”消息。它应该询问同一个变量的值。我尝试用这个来做到这一点:

scanf(" %[0-9]d",&x);

和此:

else
       result = scanf("%*s");

但它仍然无效。我应该寻找什么?我搜索了互联网,但我只找到了使用cin的C ++解决方案,不幸的是它根本不适用于C.

2 个答案:

答案 0 :(得分:3)

您可以尝试这样的事情:

char c[SIZE];
int i;    

// While the string is not a number
while(fgets(c, SIZE , stdin) && !isAllDigit(c));  

其中isAllDigit是:

int isAllDigit(char *c){
    int i;
    for(i = 0; c[i] != '\0' && c[i] != '\n'; i++) // Verify if each char is a digit
       if(!isdigit(c[i]))         // if it this char is not a digit
           return 0;              // return "false"

    return 1; // This means that the string is a number       
} 

答案 1 :(得分:2)

scanf不再使用太多,因为它完全不适合键盘输入。这些天的基本方案是在循环中执行fgets()+ validate + sscanf()。