0

我试图仅从名为 Store-1.txt 的文件中读取数字。该文件包含以下内容:“coffee 3Mugs -3Soap 10”
我使用的是fscanf()函数而不是getc(). 我的代码无法编译。我哪里错了。PS:我是C新手。请耐心等待。

#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]);

如果您只想读取文件第二列中的数字,则可以读取第一列并忽略它。

#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;
}

请注意,我将循环从 4 更改为 3,因为您只有 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;
}

应该让你朝着正确的方向前进......

note%*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 回答