我的目标是接受四位数字和四个字符串。 (*“字符串不应包含数字或特殊字符”);
如果提供了无效的输入,程序不应该终止,并且必须允许用户输入详细信息并继续直到他希望终止。
我能够找到输入是否为数字。
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位数字)
答案 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;
}