2

ExamIDを表す数値を保持するchar変数が1つあります(charである必要があるためcharです)。私のテキストファイルは次のようになります。

5   1   Exam 1 (audit 31.10.)
6   1   Exam 2 (audit 23.10.)
14  1   Lab 01 (audit 21.11.)
16  1   Lab 02 (audit 28.11.)
...

各行の最初の数字はexamID、2番目はその試験の最大ポイント数、行の残りのテキストは試験名です。テキストでexamIDの一致を検索する必要があります。一致する場合は、後で使用できるように、最大​​ポイント数と試験名を変数に保存する必要があります。これは私がこれまでに持っているものです:

char examName[100];
char tmp[100];
int  examID;
int  maxPoint=0;

FILE *fin=fopen("Exams.txt", "r");

while(fgets(tmp, sizeof(char)*100, fin)!=NULL) {
    sscanf(tmp, "%d", &examID);
    if(examID==s.examNum)
        printf("%d", examID);
}

だから私は一致を見つけてそれを印刷しました、そしてそれは大丈夫です、しかし私は行の2番目の数字と試験の名前を読む方法がわかりません。

4

1 に答える 1

3

あなたはほとんどそこにいました:

sscanf(tmp, "%d %d %[^\n]", &examID, &maxPoint, examName); 
if(examID==s.examNum)
    printf("%d %d %s\n", examID, maxPoint, examName);

fgets完全なlikeを読み取り、sscanfフォーマット文字列が示すように解析します。したがって、数字、数字、文字列(この場合のように)が必要な場合は、次のように使用できます。"%d %d %[^\n]"

注:にはスペースが含まれているため(改行の前のテキストファイルのリスト部分であるため)、 「改行が文字列として保存されるまですべてが必要」examNameという否定スキャンセットを使用します。sscanf


ちなみに、変数を初期化します。

char examName[100] = {'\0'};
char tmp[100] = {'\0'};
int  examID = 0;
于 2013-01-15T20:16:07.780 に答える