Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 检查输入是否为字符串(仅4个字符),如果不是,请再次返回输入_C_String_Validation_Input_Scanf - Fatal编程技术网

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

C 检查输入是否为字符串(仅4个字符),如果不是,请再次返回输入,c,string,validation,input,scanf,C,String,Validation,Input,Scanf,我的目标是接受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

我的目标是接受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位数字)

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

字符输入[16];
int ok=1,k=0;
如果(scanf(“%s”,输入)>0&&strlen(输入)==4){
//检查是否是一个单词
对于(;k<4;k++)
如果(!isalpha(输入[k]){
//检查它是否是一个数字
对于(int k=0;k<4;k++)
如果(!isdigit(输入[k]))
ok=0;
打破
}
}
否则ok=0;
如果(!ok)
printf(“无效输入,请输入4位数字或4个字母的单词”);
否则{
printf(“有效输入”);
...
}

我相信您需要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);
int number=0;
字符字符串[10]={0};
做{
printf(“请输入四位数字”);
scanf(“%d”和编号);
如果(number>=1000&&number您可以使用
gets()
1以获取整行并检查行长。如果第一个字符介于
'0'
'9'
之间,则检查其余字符是否也是3个数字。如果第一个字符是字符串中的有效字符,则检查其余3个字符是否也是字符串中的有效字符


1请参见以下内容:

#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;
}
#包括
#包括
#包括
内部主(空)
{
chars[32],*p;
int x;
fgets(s、sizeof(s)、stdin);
如果((p=strchr,“\n'))!=NULL)
*p='\0';
x=(int)strtol(标准普尔,10);
如果((p-s)==4){
printf(“%d\n”,x);
}否则{
printf(“请输入四位数\n”);
}
返回0;
}

atoi()
isaplha()
和返回值。您可以检查
num>=1000&&num@Rohan,这很有帮助。我可以避免循环。谢谢。请帮助我在字符串中找到解决方案。因为您希望输入的数字为4位。此代码也不接受4个字母的字符串。请更正它:(对于字符串,它不起作用。你能显示完整的prgm吗?如果它不正确,prgm应该显示“无效,请重新输入”。否则让它继续,直到我按x。上面的代码永远不会终止。即使我输入了有效或无效的输入。请编辑答案或给出新答案。谢谢
get()
是危险的,不推荐使用。)
#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;
}