2013-07-11 15 views
0

這是一個程序,它逐個字符地讀取數據,直到找到字符數字並將其轉換爲整數。通過讀取字符轉換爲負整數

#include <stdio.h> 

int main(void) { 

    char ch = getchar(); 
    printf("Type some data including a number"); 
    while(ch < '0' || ch > '9') //as long as the character is not a digit. 
    { 
    ch = getchar(); 
    } 

    int num = 0; 
    while(ch >= '0' && ch <= '9') //as long as we get a digit 
    { 
    num = num * 10 + ch - '0'; //convert char digit to integer 
    ch = getchar(); 
    } 
    printf("Number is %d\n",num); 

} 

該程序只能找到正整數。我希望程序能找到負數或浮點數。我如何讓程序做到這一點?我嘗試使用if語句在while循環中尋找一個數字,但那不適合我。

+0

首先,解決您的壓痕。其次,您的第一個「while」跳過非數字字符,需要指示不要跳過「 - 」和「。」。然後你必須處理遇到' - '或''的情況。但不是數字後面,因此不是數字的一部分。 –

+0

我不明白,首先你說你想將char轉換爲數字,然後你說你想讓程序找到負整數? – 0decimal0

+0

通常,在讀取第一個字符之前發出提示。事實上,習慣C會使用:int c;的printf( 「...」); while((c = getchar())!= EOF &&(c < '0' || c >'9'));'(後面的分號應該在它自己的一行上)。擴展到處理+ 3.14E-13是不平凡的;您可能需要某種狀態機(或使用'scanf()'或其親屬之一)。 –

回答

2

看來好像fscanf將是一個更好的解決方案

0

E.g

#include <stdio.h> 
#include <ctype.h> 

int main(void) { 
    //input format ([^0-9]*-)?[0-9]+ 

    int ch, sign = 1; 
    while(!isdigit(ch=getchar())){ 
     if(ch=='-'){ 
      ch=getchar();//one character look-ahead 
      if(isdigit(ch)){ 
       sign = -1; 
      } 
      ungetc(ch, stdin);//push back 
     } 
    } 

    int num; 
    for(num=0;isdigit(ch);ch = getchar()){ 
     num = num * 10 + ch - '0'; 
    } 
    num *= sign; 

    printf("Number is %d\n",num); 

    return 0; 
}