C将char转换为int

时间:2014-12-01 15:32:09

标签: c loops char scanf getchar

我试图在C中构建一个程序:

  1. 获取用户年龄
  2. 检查年龄是否在18至120之间
  3. 检查年龄是否包含其他字符,如字母,点等。
  4. 如果不在18-120之间或包含其他字符,请返回第1部分。
  5. 要检查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);
    }  
    

2 个答案:

答案 0 :(得分: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未定义。)  除非您遇到编译问题,否则请始终发布可编译代码。

答案 1 :(得分:0)

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