我有一个文本文件,其中包含一些我想要输出到屏幕上的句子。
The time to come.
Normal, common, or expected.
A special set of clothes worn by all the members of a particular group or organization
Already made use of, as in a used car.
Bing
A circle of light shown around or above the head of a holy person.
The god of thunder.
An act that is against the law.
Long dress worn by women.
Odd behaviour.
这是我用来为这些定义生成单词输出的代码,但是Scanf不喜欢空格,所以有人可以编辑这段代码来输出上面的定义,谢谢。
应该说这个预告片但输出应该是一次1个句子。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
FILE *fp;
int main(void)
{
struct store
{
char id[128];
}stock[10];
int printnum;
int allrec=0;
int startrec=0;
fp=fopen("Test 24 Definitions.txt","r");
printf("i");
fscanf(fp,"%s",&stock[startrec].id);
while(!feof(fp))
{
printf("%s", stock[startrec].id);
printf(" \n");
getch();
startrec=startrec+1;
allrec=startrec;
fscanf(fp,"%s",&stock[startrec].id);
}
fclose(fp);
printf("\n\n\n\n");
int i;
for (i=0; i<allrec; i++)
{
printf("%s\n",stock[i].id);
getch();
}
}
带有fgets的示例代码将不胜感激
答案 0 :(得分:0)
这可能有助于您理解
#include <stdio.h>
#include <stdlib.h>
FILE *fp;
int main(void)
{
struct store
{
char id[128];
}stock[10];
int printnum;
int allrec=0;
int startrec=0;
fp=fopen("Test 24 Definitions.txt","r");
while(!feof(fp))
{
fscanf(fp,"%[^\t]s",stock[startrec].id);
printf("%s", stock[startrec].id);
}
fclose(fp);
return 0;
}
答案 1 :(得分:0)
使用ftell
获取文件的大小。然后使用fgets
读取文件内容。不要使用feof
来查找文件的末尾。 “while( !feof( file ) )” is always wrong
试试这段代码。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LINE_LENGH 255
int main(void)
{
char id[MAX_LINE_LENGH];
int size;
FILE *fp;
fp=fopen("test.txt","r");
fseek(fp, 0, SEEK_END);
size = ftell(fp);
fseek(fp, 0, SEEK_SET);
while(size>0)
{
fgets(id, MAX_LINE_LENGH, fp);
printf("%s", id);
/* copy this id to any char array if you want */
size = size-strlen(id);
}
fclose(fp);
printf("\n");
}
答案 2 :(得分:0)
代码前的一些评论:
#include <stdio.h> #include <stdlib.h>
FILE *fp;
int main(void)
{
struct store
{
char id[128];
} stock[10];
int allrec=0;
int rec=0;
int res;
fp = fopen("text.txt","r");
if(!fp) printf("failed to open file\n");
while(!feof(fp))
{
res = fgets(&stock[rec].id, 128, fp);
if(!res) {
break;
}
printf("%s", stock[rec].id);
rec++;
}
fclose(fp);
printf("\n\n\n\n");
int i;
fflush(stdin);
for (i=0; i<rec; i++)
{
printf("%s",stock[i].id);
getchar();
}
}
答案 3 :(得分:0)
要使用fscanf()
而不是单词阅读一行文字,请在2个地方使用以下代码:
fscanf(fp,"%127[^\n]%*c", stock[startrec].id);
"%127[^\n]"
如果不跳过前导空格,请最多阅读127 char
。除了不在'\n'
中阅读。存储结果,并附加'\0'
至stock[startrec].id
。
"%*c"
如果不跳过前导空格,请阅读任意1 char
。这是阻止前一个的'\n'
或我们现在处于EOF状态的'*'
。 fgets()
表示不保存结果。
或者更好......
使用\n
,根据需要修剪典型的尾随fgets(stock[startrec].id, sizeof stock[startrec].id, fp);
。
fscanf()
建议检查fgets()
和feof()
的结果并删除printf("i");
if (fp != NULL) {
int cnt;
while((cnt = fscanf(fp, "%s", stock[startrec].id)) != EOF) {
if (cnt < 1) Handle_NothingWasRead();
printf("%s", stock[startrec].id);
printf(" \n");
getch();
startrec = startrec + 1;
allrec = startrec;
}
}
{{1}}