我有一个字符数组,其中应该只有数字(10位)。如果用户输入字母或特殊字符(即使在这些数字之间),程序应该提示用户再次输入数字。
我试了很多种方法,但还是找不到一种方法。这就是我目前所能做的:
int f = 1;
int i = 0;
int flag =1;
char num[11];
printf("Enter a number: ");
while (f == 1) {
scanf("%10s", num);
while (flag == 1 && isdigit(num[i])) {
i++;
if (i == 10) {
f = 0;
flag =0;
}
}
if (!isdigit(num[i])) {
printf("Enter numerical char: ");
}
}
在我输入不正确的值后,它会显示一个空行。如果我在空行中输入任何值,它只会显示“输入数字字符:“并提示再次输入num。
P.S.我知道有一种方法可以确保只输入数字值,考虑到字符的事实,不像数字被包括在单引号中。(不知道如何做到这一点tbh)
提前感谢!
2条答案
按热度按时间jw5wzhpr1#
有几种方法可以做到这一点。
简单的方法是使用
fgets
来获取字符串。然后,我们可以使用
strtol
来解码数字[并检查结尾字符的有效性]。要完全手动完成,我们可以在循环中使用
isdigit
,一次生成一位数。下面是一些带有注解的示例代码,显示了这两种方法:
**编辑:**添加了从文件重放/回显输入的代码。
mum43rcc2#
在C中处理
stdin
的输入可能是一件痛苦的事情。我试图在注解中解释需要做什么,同时以您希望使用的方式维护变量。但是我确实需要添加int ch
来捕获stdin
的输入。我捕获输入的方式是FAR!但是它说明了这个想法,并且做了你需要它做的事情。但是,为了改进你的答案,我建议把它移到它自己的函数中。另外,它忽略了大于10个字符的数字的输入,因此,如果您输入012345678901234567,它将忽略超过第10位的输入,但仍然通过每个变量和标志的测试。注解应该是自解释的。我没有测试它,除了确保它编译,一次为数字,一次为数字和文本,但想法是存在的,并且您应该能够对其进行扩展以满足您的需求。