2016-11-18 96 views
0

我的問題是不相關的scanf();打印數字,直到負數輸入

例如:輸入 - >542-4Output - >5,4,2,-4

我的意思是,印刷直到負數負數。這是直到負數,但我也想打印負數。我能怎麼做 ?請幫幫我。我用getchar()isdigit()int a=x-'0'

char x =getchar(); 
while(isdigit(x)){ 
    int a=x-'0'; 
    printf("%d,",a); 
    x=getchar(); 
} 
+2

scanf函數是如何與目前尚不清楚。你能澄清你的輸入和輸出以及預期的輸出是否代表你在問題中的代碼? –

+0

我的輸入是458-1715,我的輸出是4 5 8 -1,每個數字是分開的,當我輸入負值時,我的程序將停止並打印,直到負數和負數。減號後不打印 –

+0

什麼應該打印「12 + 34-56yz」?或「12--34yz」? – chux

回答

2

isdigit(x)對於'-'不會成立,所以您需要單獨測試。

由於您希望在第一個負數後停止,因此您在閱讀-時需要設置一個標記,因此您不會繼續閱讀其他負數。

int neg = 0; 
char x = getchar(); 
while (isdigit(x) || x == '-') { 
    if (x == '-') { 
     neg = 1; 
    } else { 
     int a = x - '0'; 
     if (neg) { 
      a = -a; 
     } 
     printf("%d", a); 
     if (neg) { 
      break; 
     } 
    x = getchar(); 
} 
+0

這是行不通的。當我的輸入452-1,我outout 4 5 2 -3 1,我測試,總是在我的輸出有-3 :) –

+0

我已經改變它,所以它打破循環後的第一個數字後負面。 – Barmar

+0

謝謝,最好的 –

0

getchar()一次讀取一個字符。你會得到'5','4','2'和' - '。

isdigit(x)不適用於' - ',所以循環終止在那裏。

0

這個怎麼樣:

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    char x = getchar(); 
    int a; 
    while (x != '\n') 
    { 
     if (isdigit(x)) 
     { 
      a = x - '0'; 
      printf("%d,", a); 
     } 
     else 
      printf("%c", x); 

     x = getchar(); 
    } 

    printf("\n"); 

    return 0; 

}

+0

@SefaTaşcan:如果你喜歡這個答案,請將它們和標記爲已接受,併爲其他具有相同問題的人標記。 – user7140484