【问题标题】:Check if input is a string (4 characters only) and if not return to input again检查输入是否为字符串(仅限 4 个字符),如果不是再次返回输入
【发布时间】:2014-02-06 08:45:39
【问题描述】:

我的目标是接受4位数字4位字符串(字符串不应包含数字或特殊字符)

如果输入无效,程序不应终止,它必须允许用户输入详细信息并继续,直到他希望终止。

我能够找到输入是否是数字。

if(scanf("%d",&input)!=1)
{
    printf("enter the number please");
    ... // I have option to re enter using while and flags
}
else
{
    // I continue my work
    ...
}

为了检查它是四位数,我尝试使用命令

i=0;
num = input;
while(num>0)
{
    i = i+1;
    num = num/10;
}
if(i==4){
    ...//I continue
}
else
    printf("please enter four digit");

我不知道要检查相同的字符。 (我知道如何使用strlen() 检查它的长度)

请帮我写C中的代码。(还帮我减少/优化上述逻辑以检查输入是否为4位数字)

【问题讨论】:

  • atoi(), isaplha() 和返回值。
  • 您可以通过num >= 1000 && num <=9999查看4位数字。
  • @Rohan 这很有帮助。我可以避免循环。谢谢。请帮我在字符串中找到解决方案。

标签: c string validation input scanf


【解决方案1】:

要检查它是四位数字,您可以简单地检查数字是否介于 1000 和 9999 之间。(我假设您不希望数字以 0 开头。)

【讨论】:

    【解决方案2】:
    char input[16];
    int ok = 1, k = 0;
    if (scanf("%s", input) > 0 && strlen(input) == 4) {
        // check if it's a word
        for (; k < 4; k++)
        if (!isalpha(input[k])) { 
            // check if it's a number
            for (int k = 0; k < 4; k++)
               if (!isdigit(input[k])) 
                   ok = 0;
            break;
        }
    }
    else ok = 0;
    if (!ok) 
        printf("invalid input, please enter a 4-digit number or 4-letter word");
    else {
        printf("valid input");
        ...
    }
    

    【讨论】:

    • 因为您希望输入的数字为 4 位。
    • 此代码也不接受 4 个字母的字符串。请更正。 :(
    【解决方案3】:

    我相信你想要 2 个输入一个数字和一个字符串。你可以这样做

    int number= 0;
    char string[10] = { 0 };
    
    do {
        printf("please enter four digit");
        scanf("%d", &number);
        if(number >=1000 && number<= 9999)
           break;
    } while(1);
    
    do {
        printf("please enter four character string");
        fgets(string, sizeof(string), stdin);
        if(strlen(string) == 4)
           break;
    } while(1);
    

    【讨论】:

    • 对于字符串它不起作用。你能展示一个完整的prgm吗?如果不正确,prgm 应显示“无效,请重新输入”。否则让它继续,直到我按 x。上面的代码永远不会终止。即使我输入了有效或无效的输入。请编辑答案或提供新答案。谢谢
    【解决方案4】:

    您可以使用gets()1fgets()获取整行并检查行长。如果第一个字符介于 '0''9' 之间,则检查其余字符是否也是 3 个数字。如果第一个字符是字符串中的有效字符,则检查剩余的 3 个字符是否在字符串中也有效。


    1Why is the gets function so dangerous that it should not be used?

    【讨论】:

    • gets() 很危险且已弃用
    【解决方案5】:

    strtol 可以帮忙:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(void)
    {
        char s[32], *p;
        int x;
    
        fgets(s, sizeof(s), stdin);
        if ((p = strchr(s, '\n')) != NULL)
            *p = '\0';
        x = (int)strtol(s, &p, 10);
        if ((p - s) == 4) {
            printf("%d\n", x);  
        } else {
            printf("Please enter four digit\n");
        }
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多