2014-12-01 87 views
-5

我想用C来构建一个程序:Ç字符转换成int

  1. 获取的用户年龄
  2. 检查,如果年龄是,如果年龄不检查18 120之间
  3. 包含其他字符,如字母,点等。
  4. 如果不是18-120之间,或包含其他字符回款1

要检查3号,我相信我需要扫描来自用户的年龄作为一个char后来我不能检查它是否在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

帮助什么? – Maroun 2014-12-01 15:32:54

+0

好的家庭作业:D自己动手! (如果它不是功课,你还没有付出努力) – Rizier123 2014-12-01 15:33:20

+0

目前还不清楚你是否已经成功完成第1步。也许你应该展示你到目前为止所做的一切。 – 2014-12-01 15:33:55

回答

0

您应该使用long int strtol(const char *nptr, char **endptr, int base)功能,阅读手册。

+0

或者他可以使用atoi(con​​st char * str); – 2014-12-01 15:35:51

+0

这样他就无法检查转换失败的原因。如果他想知道字符串中是否存在其他字符,这是一个很好的解决方案。 – 2014-12-01 15:36:48

1

将年龄和输入保存在单独的变量中,如agech
由于每个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未定义。) 除非您遇到编译问题,否则始终发布可编译代码。