2014-12-01 185 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未定義。) 除非您遇到編譯問題,否則始終發佈可編譯代碼。