2016-11-18 4 views
0

私の問題は、例えばscanf();印刷数負の数が入力されるまで

とは関係ありません:入力 - >542-4Output - >5,4,2,-4

私は意味は、負の数と負の数になるまで印刷します。それは負の数まではokeyですが、私は負の数も印刷したいです。どのようにできるのか ?私を助けてください。私は一度に単一の文字を読み込み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、私の外出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

関連する問題