我试图仅从名为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;
}
答案 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;
}
这会对您的输入文件有效,但问题可能不像您想要的那样可扩展吗?