0

Store-1.txtという名前のファイルからのみ番号を読み取ろうとしています。このファイルには次のものが含まれています。「coffee3Mugs-3Soap10」の代わりに関数
を使用しています。コードがコンパイルされません。どこが間違っているのか。PS:私はCに不慣れです。しばらくお待ちください。fscanf()getc()

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

int main()
{
    int a[20];
    int i,j;


    FILE *fp;
    fp=fopen("C:/Users/PSN/Desktop/Store-1.txt","r");
    if(fp>0)
    {
        for(i=0;i<4;i++)
        {
            fscanf(fp,"%d",&a[i])
        }
    }
    for(j=0;j<3;j++)
    {
        printf("%d", a[j]);
    }

    fclose(fp);

    system("PAUSE");  
    return 0;
}
4

3 に答える 3

1

この行にはセミコロンがありません。

fscanf(fp,"%d",&a[i])

する必要があります:

fscanf(fp,"%d",&a[i]);

ファイルの2番目の列の数字のみを読み取りたい場合は、最初の列を読み取って無視することができます。

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

int main()
{
    int a[20];
    int i,j;
    char str[256];

    FILE *fp;
    fp=fopen("C:/Users/PSN/Desktop/Store-1.txt","r");
    if(fp>0)
    {
        for(i=0;i<3;i++)
        {
            fscanf(fp, "%s", str); // read the first column & ignore
            fscanf(fp,"%d",&a[i])
        }
    }
    for(j=0;j<3;j++)
    {
        printf("%d", a[j]);
    }

    fclose(fp);

    system("PAUSE");  
    return 0;
}

行が3つしかないため、ループを4から3に変更したことに注意してください。より良い方法は、ファイルの終わりまで読み取られた行をハードコーディングしないことです。ただし、それは入力ファイルの形式や読み取りたい値の数などによって異なります。

于 2012-11-07T19:51:07.963 に答える
1

試す:

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

int main()
{
    int a[20];   
    int i,j;  

    FILE *fp;
    fp=fopen("C:/Users/PSN/Desktop/Store-1.txt","r");
    if(fp>0)
    {
        for(i=0;i<4;i++)
        {
            fscanf(fp,"%d",&a[i]); // <You missed the ; here
        }
    }

    for(j=0;j<3;j++)
    {
        printf("%d", a[j]);
    }

    fclose(fp);

    system("PAUSE");  
    return 0;
}

これは偶然にもインデントの良い例です...:-)

于 2012-11-07T19:51:29.957 に答える
1

入力ファイル「store-1.txt」が次のようになっている場合:

coffee 3
Mugs -3
Soap 10

次に、これを試してください:

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

int main()
{
    int a[20];
    int i;  

    FILE *fp;
    fp=fopen("store-1.txt","r");

    if(fp>0) {
        for(i=0;i<3;i++) {
            fscanf(fp,"%*s %d", &a[i]);
        }
    }
    for(i=0;i<3;i++) {
        printf("%d\n", a[i]);
    }

    fclose(fp);

    return 0;
}

あなたを正しい方向に向かわせるはずです...

注意%*sはfscanfに文字列があることを伝えますが、それを無視します

意図した入力の代替:

coffee 3Mugs -3Soap 10

になり得る:

int main()
{
    int a[20];
    int i,j;  

    FILE *fp;
    fp=fopen("store-1.txt","r");

    fscanf(fp, "%*s%d%*s%d%*s%d", word, &a[0], word, &a[1], word, &a[2]);

    /* if(fp>0) { */
    /*     for(i=0;i<3;i++) { */
    /*         fscanf(fp,"%s %d",word, &a[i]); */
    /*     } */
    /* } */
    for(j=0;j<3;j++) {
        printf("%d\n", a[j]);
    }

    fclose(fp);

    return 0;
}

これは入力ファイルで機能しますが、必要なほど拡張可能ではない可能性がありますか?

于 2012-11-07T20:04:42.867 に答える