1

私は本を​​読んでいますが、これを試してみてください: (英語ではないので翻訳しました)

生徒数 n を要求し、n 人の生徒を動的に選択するプログラムを作成します。名前は 10 文字で、メモは 5 文字です。

上記の選択内容からテキスト ファイル note.txt を作成し、10 文字になるようにハイフンを追加します (名前用)。

次に、ファイルを読み取り、そこから (のみ) 合計を計算します。次に、メモが 10 以下のものの名前とメモを表示します。

createStudent、createFile、readFile の 3 つの関数を実装する必要があります。グローバル変数は使用しないでください。

構文 : 名前は char nom[10+1] として宣言する必要があります (つまり、James。10 文字を取得するために 5 つのハイフンが追加されます) => james----- および注: char[5+1] (つまり15.00 または 07.50)

ヒント : メモをテキスト形式から浮動小数点形式に変換するには、atof 関数を使用できます。

createStudent 関数と createFile 関数を作成しました。それらはうまく機能しますが、最後の部分 (readFile 関数) がわかりません。

私のテキスト ファイルは次のような形式です: Bart------ 04.50 Lisa------ 18.00 Homer----- 03.00

void readFile(int n){
FILE* file = NULL;
double temp= 0.0, average= 0.0;
double *total = (double*)malloc(n*sizeof(double));

int position = 0;
char information[5+1]="";

file = fopen("c:\\myFile.txt","r");
fseek(file,10,SEEK_SET);
while(fgetc(file) != EOF)
{
    fscanf(file,"%5s",&information);
    temp = atof(information);
    total[position]= temp;

    position++;

    fflush(stdin);
    fseek(file,11,SEEK_CUR);
}
fclose(file);
for(int compteur=0;compteur<2;compteur++)
{
    moyenne += totalNote[compteur];
}

コンパイルはできますが、動作せず、その理由がわかりません :( C 言語は Java や C# に比べて非常に面倒だと感じています。

ライトをください。

4

3 に答える 3

3

入力ファイルに " " という形式の行が含まれているようです。行ごとに固定数の文字列/数値が常にある場合は、単純に使用できますfscanf(例: fscanf(file, "%*s %f %*s %f %*s %f", &number1, &number2, &number3);)。

一方、行ごとに任意の数の文字列/数値のペアを使用できる場合は、strtok関数を確認する必要があります。

于 2010-12-28T10:13:05.767 に答える
1

strtok_r (または strtok_r が利用できない場合は strtok) の使用を検討したいと考えています。次に、文字列をスペース区切り文字でトークンの配列に変換できます。次に、配列をループして金額を変換して合計するのは簡単です。

于 2010-12-28T10:09:06.913 に答える
1

fscanf または fgets、strtok、atol (または sscanf) の組み合わせを使用して、数値を読み取ります。

于 2010-12-28T11:38:54.727 に答える