3

stdinから配列に数値を取得しようとしています。stdinの最初の数値は、配列内の要素の数です(数値は任意のintにすることができます)。私は最初の番号を取得するためにこれを行いました:

while(c=getchar()!=' '){
n*=10;
n+=atoi(c);
}

次に、サイズnの配列を作成しました。今、私は残りすべてを通過する必要があります

 while(c=getchar()!=EOF)

配列に数値を追加します。数字は\tで区切られ、場合によっては\nも区切られます。どうすればいいですか?私は1時間考えていましたが、まだ機能するコードがありません。何か助けはありますか?ありがとう!

4

1 に答える 1

3

あなたが特にマゾヒスティックだと感じていない限り(または宿題の要件のためにできない)、あなたは通常それを使ってそれをしscanfます:

int n;
int *numbers;

scanf("%d", &n);

numbers = malloc(n * sizeof(*numbers));

for (int i=0; i<n; i++)
    scanf("%d", &numbers[i]);

より堅牢なエラー処理を行うには、を使用して一度に1行ずつ読み取り、(または同様の)fgetsを使用してそれを個々の数値に解析することがよくあります。sscanf

余談ですが、いいえ、からへのリターンをキャストしないでください。Cでは必要でも望ましくもありません。ただ、上記のように結果を割り当てます。コンパイラが変換に関する警告(またはエラー)を表示している場合は、2つのいずれかが発生していることを意味します。必要に応じて忘れているか、実際にC++としてコンパイルしています。C ++を作成している場合は、実際のC ++を作成します。つまり、まったく使用しないでください。mallocint *#include <stdlib.h>#include <stdlib.h>malloc

于 2012-04-08T07:26:18.250 に答える