#include "stdio.h"
main( ) {
FILE *fp1;
char oneword[100];
char *c;
fp1 = fopen("TENLINES.TXT","r");
do {
c = fgets(oneword, 100 ,fp1); /* get one line from the file */
if (c != NULL)
printf("%s", oneword); /* display it on the monitor */
} while (c != NULL); /* repeat until NULL */
fclose(fp1);
}
我不明白为什么这段代码需要有一个char * c。 char * c在这里做了什么。我试图将所有'c'更改为'oneword',但它总会出错。你能解释一下吗? 感谢。
答案 0 :(得分:2)
您是否阅读了fgets(3)的文档?它会在失败时返回NULL
(例如,当您到达文件末尾时)。
当然,你应该检查fopen(3)的失败,如:
fp1 = fopen("TENLINES.TXT","r");
if (!fp1)
{ perror("fopen TENLINES.TXT failure"); exit(EXIT_FAILURE); };
然后编译所有警告&调试信息(例如gcc -Wall -Wextra -g
)并了解如何使用调试器(gdb
)
答案 1 :(得分:1)
fgets()
返回一个指针。你想在哪里存放它?应该为此目的定义一个指针。这就是宣布char *c
的原因。此外,您不能使用oneword
,这已经用于存储从文件中读取的行。
答案 2 :(得分:1)
[评论太久了]
使用while循环代替do循环可以让你在不定义c
的情况下四处走动:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int result = EXIT_SUCCESS; /* Be optimistic! */
FILE * fp1 = fopen("TENLINES.TXT", "r");
if (NULL == fp1)
{
result = EXIT_FAILURE;
perror("fopen() failed");
}
else
{
char oneline_if_shorter_then_100_characters[100];
while (NULL != fgets(oneline_if_shorter_then_100_characters, sizeof oneline_if_shorter_then_100_characters, fp1)) /* get one line from the file */
{
printf("%s", oneline_if_shorter_then_100_characters); /* display it on the monitor */
} /* repeat until fgets had returned NULL */
fclose(fp1);
}
return result;
}
答案 3 :(得分:0)
使用fgetc()
#include <stdio.h>
int main() {
FILE *fp1;
char oneword[100];
int c;
int i=0;
if((fp1 = fopen("Newfile.x","r")) <= 0){
return 1; // File opening failled
}
while((c=fgetc(fp1))!=EOF){
oneword[i]=c;
i++;
if(i>=99 || c=='\n'){
// We are out of buffer OR new line reached
oneword[i]='\0';
printf("%s \n",oneword);
i=0;
}
}
// If some left ; output that too
oneword[i]='\0';
printf("%s \n",oneword);
return 1;
}