仅输入1到1000之间的数字时出现问题

时间:2019-08-08 11:01:17

标签: c scanf fgets

在Ubuntu上工作

我的代码有问题,我不知道如何解决。也许有一个功能可以帮助我解决这个问题。

我想输入一个字符串,然后我的程序需要检查它是否是1到1000之间的数字。是否有字母或符号

这是我的代码:

    char tab[200]="";
    int i;
    scanf("%199[^\n]s",tab);
    for(i=0;i<200;i++)
    {
        if(tab[i] >= 'A' && tab[i]<='Z')
        {
            printf("Big letters\n");
        }
        else if(tab[i] >= 'a' && tab[i]<='z')
        {
            printf("Small letters\n");
        }
    }
    if(strlen(tab) == 4 && tab[3] > 0 && tab[2] > 0 && tab[1] > 0 && tab[0] > 1)
    {
    printf("Bigger then 1k\n");
    }
    else if(strlen(tab) > 4)
    {
        printf("Longer then 4 chars\n");
    }

它不能正常工作,也没有包含符号...

我发现了这样的代码,但不确定如何使我的电话号码小于1001

    char input[MAXINPUT] = "";
    int length,i; 
    int number;



    printf(" id: \n");
    fgets(input, MAXINPUT, stdin); 
    number = atoi(input);
    length = strlen (input);
    for (i=0;i<length; i++)
        if (!isdigit(input[i]))
        {
            printf ("Entered input is not a number\n");
            exit(1);
        } else if (number < 1001)
    printf ("Given input is a number\n");

不确定我在这里是否正确使用fgets

在您将我发送到here之前 ,请阅读我的问题

2 个答案:

答案 0 :(得分:0)

使用此..也许此帮助。您可以选择修改它。

#include<string.h>              // header file for strlen()
void method()
{
  char tab[200]="";
  int i;
  scanf("%199[^\n]s",tab);
    for(i=0;i<strlen(tab);i++)   // Loops only to the lenght of total vlaues in array
    {
    if(tab[i] >= 65 && tab[i]<=90)          // Ascii Value of Capital Ltrs
    {
        printf("Big letter\n");
    }
    else if(tab[i] >= 97 && tab[i]<=122)      // Ascii Value of Small Ltrs
    {
        printf("Small letter\n");
    }
     else if(tab[i] >= 48 && tab[i]<=57)    // Ascii Value of Numbers
    {
        printf("Number\n");
    }else          // of else other numebrs are all Symbols but can be 
    {
         printf("Symbols\n");
    }

}

}

答案 1 :(得分:0)

请注意,您正在将字符与整数(数字)进行比较。例如,当您在协同关系中使用数字值1时,ASCII中的字符“ 1”为49。请测试以添加与引号比较类似的单引号,并查看结果是否不同。

最好的问候 埃斯比约