0

1 か月前に C の学習を始めたばかりで、これはデータ リストのピークを検出するために書いたコードです。ターミナルで「input data.txt」を実行すると、どういうわけか無限ループに陥りますが、標準入力またはキーボードを介してまったく同じデータを手動で入力すると、完全に正常に動作します。無限ループに陥る理由はありますか?

ありがとう!

int main(void)
{
    int data1 = 0;
    int data2 = 0;
    int data3 = 0;
    int counter = 1;

    scanf("%d %d %d", &data1, &data2, &data3);
    puts("Number  Magnitude");

    while (data3!= EOF){
        if ((data1<=data2)&&(data2>data3)){
            printf("%*d%*d\n", 4,counter,11, data2);
            counter++;

        }
        data1 = data2;
        data2 = data3;
        scanf("%d", &data3);

     }
return 0;
}
4

4 に答える 4

0
scanf("%d", &data3);

上記の関数のデフォルトの入力ストリームはリダイレクトされます

printf("%*d%*d\n", 4,counter,11, data2);

関数の出力。区別しなければなりません。

詳細コードはこれくらいです。入力関数(fscanf)にファイルから数値を読み取らせるだけでOKです

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
    int data1 = 0, data2 = 0, data3 = 0;
    int counter = 1;
    puts("Number Magnitude");

    FILE *fp = fopen(argv[1], "r+");
    if(fscanf(fp, "%d %d", &data1, &data2) != EOF){
        while (fscanf(fp, "%d", &data3) != EOF) {
            if((data1 <= data2) && (data2 > data3)){
                printf("%*d%*d\n", 4, counter++, 11, data2);
            }
            data1 = data2;
            data2 = data3;
        }
    }
    fclose(fp);
    return 0;
}

次のような出力:

$猫データ.txt

3 3 4 5 5 5 4 2 1 191 3 43 2 3 0

$ ./a.out data.txt

数値 大きさ 1 5 2 191 3 43 4 3

于 2013-07-28T01:33:51.610 に答える
0

ここで混乱するかもしれませんが、ファイルではなく scanf を使用する場合、デフォルトの入力/出力、おそらく端末からスキャンしています。ファイル ポインタを作成し、fscanf を使用してみてください。例えば

FILE *data;
data=fopen("data.txt", "r+");
fscanf(data,"%d",&data1);
fclose(data);
于 2013-07-28T02:14:39.633 に答える
0

data1最初に、data2、 、 に値を割り当てdata3、ユーザーからの入力値も求めています。入力値を要求するか、それらの変数にいくつかの明確な値を割り当てます。また、 while ループEOFは定義されていないため、値または適切な条件に変更してください。

于 2013-07-28T06:25:37.263 に答える