C 检查输入是否为字符串(仅4个字符),如果不是,请再次返回输入
我的目标是接受4位数字,以及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
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;
}