-1

以下のコードを実行すると、次の出力が得られます。

Podaj ilosc liczb: 12

Podaj liczbe nr. 0:53

Podaj liczbe nr. 1:24

Podaj liczbe nr. 2:53

Podaj liczbe nr. 3:24

Podaj liczbe nr. 4:66

Podaj liczbe nr. 5:99

Podaj liczbe nr. 6:3

Podaj liczbe nr. 7:0

Podaj liczbe nr. 8:5

Podaj liczbe nr. 9:2

Podaj liczbe nr. 10:5

Podaj liczbe nr. 11 : 2 Twoje liczby w odwrotnej kolejnosci: 2 5 2 5 0 3 9 6 2 5 2 5

#include <stdio.h>

int main(int argc, char **argv)
{

char tablo[100];
int k,i;
printf("Podaj ilosc liczb: ");
scanf("%d", &k);fflush(stdin);
for(i=0; i<k; i++){
                 printf("\nPodaj liczbe nr. %d : ", i);
                 scanf("%c", &tablo[i]);fflush(stdin);
                 }
printf("Twoje liczby w odwrotnej kolejnosci: \n");
for(i=k-1;i>=0;i--){
                    printf("%3c",tablo[i]);
                    }
                    printf("\n \n");

return 0;
}

なんで?修正方法は?数字を逆順にしたいだけです。

4

3 に答える 3

1

%c変換指定子は、入力ストリームから1文字scanfを読み取るように指示します。「53」と入力すると、その文字だけが読み取られます。数値を読み取ってデータ型に格納する場合は、変換指定子を使用する必要があります。'5'char%hhd

scanf( "%hhd", &tablo[i] );

128 より大きい値を格納する場合は、 などのより広いデータ型intと適切な変換指定子 ( %dfor int%hdfor short%ldforlongなど) を使用する必要があることに注意してください。

fflushのような入力ストリームでは使用しないでくださいstdin。動作は定義されておらず、意図したとおりに動作しない可能性があります。

于 2014-11-12T18:44:02.793 に答える
1

整数ではなく、個々の文字を読み書きしています。たとえば、xまたは*入力としてプログラムを実行してみてください。指定した文字を 10 進整数として解釈せずに出力するだけです。

整数を読み取る (シーケンス"123"を 10 進数 として解釈する123) には、 を使用してオブジェクトscanf("%d", ...)を読み取り、値を出力し、ではなくの配列として定義します。(そして、によって返される値を確認することを忘れないでください。そうすれば、成功したか失敗したかがわかります。)intprintf("%d", ...)tablointcharscanf

そして使用しないでくださいfflush(stdin)。入力ストリームでの の動作fflushは未定義であり、実際には必要ありません。後で、無効な入力を破棄する方法が必要になるかもしれませんが、それfflushは答えではありません。

于 2014-11-12T18:26:38.677 に答える
0

実際の数字ではなく、単一の文字のみをスキャンしています。代わりに、(not )tabloの配列である必要があり、forおよびを使用する代わりに、 を使用する必要があります。intchar%cscanfprintf%d

于 2014-11-12T18:24:16.600 に答える