检查输入是否为字符串(仅限4个字符),如果不再返回输入

时间:2014-01-17 05:51:33

标签: c string input scanf

我的目标是接受四位数字四个字符串。 (*“字符串不应包含数字或特殊字符”);

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

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

    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位数字)

5 个答案:

答案 0 :(得分:2)

我相信你想要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);

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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");
    ...
}

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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;
}