我似乎无法使用我的简单脚本来读取文件。我想要做的就是将字母读入数组。我只是随机的角色,这让我发疯。我在Debug文件夹中有文件,还有什么可能出错?我百分百肯定一切都是正确的。
这是我的代码:
FILE * ifp;
ifp = fopen("letters.txt", "r");
int i;
int bound = 20;
char data[20];
for(i =0; i<bound; i++){
fscanf(ifp, "%s", &data[1]);
if (ifp == NULL){
return;
}
printf("Data %d = %c\n", i, data[i]);
}
答案 0 :(得分:2)
以下代码
1) checks for errors
2) compiles cleanly
3) works on a test.txt file I produced.
#include <stdio.h>
#include <stdlib.h>
#define bound (20)
int main( void )
{
FILE * ifp;
if( NULL == (ifp = fopen("letters.txt", "r") ) )
{ // then, fopen failed
perror( "fopen for letters.txt failed");
exit( EXIT_FAILURE );
}
// implied else, fopen successful
int i;
char data[bound];
for(i =0; i<bound; i++)
{
if( 1 != fscanf(ifp, "%c", &data[i]) )
{ // then fscanf failed
perror( "fscanf failed" );
exit( EXIT_FAILURE );
}
// implied else, fscanf successful
printf("Data %d = %c\n", i, data[i]);
}
return(0);
} // end function: main
答案 1 :(得分:0)
嗯,可能是因为
&data[1]
应该只是
data
或等效的
&data[0]
这很可能是你想要的。
我能想到的另一个原因是,你正在阅读的行超过20个字符并且它溢出了数据数组。
看一下这个例子:http://www.tutorialspoint.com/c_standard_library/c_function_fscanf.htm
答案 2 :(得分:0)
以下是一个例子:
#include <stdio.h>
#define MAX_LINES 10
#define MAX_LINE 80
#define FILE_NAME "lines.txt"
int
main (int argc, char *argv[])
{
char lines[MAX_LINES][MAX_LINE];
FILE *fp;
int i = 0;
if (!(fp = fopen(FILE_NAME, "r"))) {
perror ("file open error");
return 1;
}
while (i < MAX_LINES) {
if (fgets (lines[i], MAX_LINE, fp)) {
printf ("Line[%d]=%s", i, lines[i]);
i++;
} else {
printf ("End of file: closing %s\n", FILE_NAME);
break;
}
}
fclose (fp);
return 0;
}
示例输出:
$ gcc -o x1 -Wall -pedantic -g x1.c
$ ./x1
Line[0]=Come and listen to my story
Line[1]='Bout a man named Jed
Line[2]=Poor mountaineer,barely kept his fam'ly fed
End of file: closing lines.txt
注意:
我们一次只读一行
我们将每行读入数组
我们提前定义数组中的#/元素(MAX_LINES)和每个字符串的最大大小(MAX_LINE)
我们检查&#34;文件打开错误&#34; (并返回&#34;非零&#34;相应地)
我们使用&#34; fgets()&#34;安全地读取一行(不用担心缓冲区溢出)。
如果您想一次阅读一个角色,该程序可以像以下一样简单:
char string[MAX_LINE], *c;
...
if (!(fp = fopen(FILE_NAME, "r"))) {
perror ("file open error");
return 1;
}
...
c = string;
while ((*c = fgetc (fp)) != EOF)
c++;
第二个例子的一个问题是它没有检查字符串长度&gt;&gt; MAX_LINE。但希望它有助于给你一些想法......