我试图在C中构建一个程序:
要检查3号,我相信我需要将用户的年龄作为字符扫描,但是我无法检查它是否在18到120之间。我无法使用数组或字符串。这是我现在的代码,它检查代码是否包含其他字符:
void main() {
char age;
int error = 0;
do
{
error = 0;
printf("Please enter your age:");
scanf("%c", &name);
while (name != '\n')
{
if ((name<'0') || (name>'9')){
error++;
}
name = getchar();
}
} while (error != 0);
}
答案 0 :(得分:1)
保持年龄并输入单独的变量,例如age
和ch
在阅读每个ch
时,请测试EOF
,'\n'
以及是否为数字。 OP的代码已经做了一些。
如果它通过,累积年龄。测试最大值(120)。这也会检测溢出
处理输入行后,检查最小值(18)。
#include <ctype.h>
#include <stdio.h>
int main(void) {
int error;
int ch;
do {
int age = 0;
error = 0;
printf("Please enter your age:");
fflush(stdout);
while ((ch = fgetc(stdin)) != EOF && ch != '\n') {
// Maybe also throw out white-space
if (isspace(ch))
continue;
// or if (!isdigit(ch)) {
if ((ch < '0') || (ch > '9')) {
error = 1;
} else {
age = age * 10 + ch - '0';
if (age > 120)
error = 2;
}
}
if (age < 18)
error = 3;
printf("Age: %d Error: %d\n", age, error);
} while (error && ch != EOF);
return 0;
}
Important to use int ch
rather than char ch
.
次要位: 使用正确的签名。例如:
// void main()
int main(void)
使用scan()
时,总是以检查返回值。
在这种情况下,代码可以简单地使用fgetc()
或getchar()
。
发布的代码无法编译。 (name
未定义。)
除非您遇到编译问题,否则请始终发布可编译代码。
答案 1 :(得分:0)
您应该使用long int strtol(const char *nptr, char **endptr, int base)
功能,请阅读手册。