尝试将数字存储在数组中并通过从文件中读取来显示它们

时间:2012-11-07 19:44:46

标签: c

我试图仅从名为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;
}

3 个答案:

答案 0 :(得分: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行。更好的方法是不将硬读码直读到文件末尾。但这取决于输入文件的格式以及要读取的值等。

答案 1 :(得分: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;
}

巧合的是缩进的一个很好的例子......: - )

答案 2 :(得分: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;
}

这会对您的输入文件有效,但问题可能不像您想要的那样可扩展吗?