int main(void)
{
FILE* fp;
char buffer[500];
char tempstr[500];
int i = 0;
int j = 0;
fp = fopen("aFaire.txt", "r");
while(fgets(buffer, 500, (FILE*) fp)) {
i = 0;
j = 0;
while ((buffer[i]!='\n')&&(buffer[i]!='\0'))
{
if (buffer[i] !=' '){
tempstr[j] = buffer[i];
i++;
j++;
}
else{
tempstr[j]='\0';
j=0;
i++;
printf("%s",tempstr);
printf("\n");
}
}
}
fclose(fp);
}
我想要做的是逐行读取一个txt文件,然后我单独处理该行中的每个单词,首先我读取缓冲区var中的行,然后复制tempstr
中的每个单词,事情是tempstr
吃了一些话。
答案 0 :(得分:0)
您可以使用fscanf()
更轻松地完成此操作。
您需要从输入文件中获取所有单词并打印它们。
while(fscanf(fp, "%s", buffer)==1)
{
printf("\n%s", buffer);
}
fscanf()
返回成功分配的数量。如果此处不是1
,则文件已结束或发生了一些错误。
在每次迭代中,一个单词将被读入buffer
,然后将显示。
并确保fopen()
确实打开了该文件,确保fp
不是NULL
if( (fp = fopen("aFaire.txt", "r"))==NULL)
{
perror("\nUnable to open input file");
return 1;
}
编辑:
在你的程序中,当角色为\n
或(空格)时,循环停止。但是之前的人物也可能形成一个词。
在while
循环结束时,添加
tempstr[j]='\0';
printf("%s\n", tempstr);
此外,行i++;
出现在if
循环内的else
和while
部分。因此,i++;
- if
之外的一个else
代替两个else
就足够了。
在printf("%s",tempstr);
printf("\n");
部分内,
printf("%s\n",tempstr);
可以组合成
while(fgets(buffer, 500, (FILE*) fp)) {
i = j = 0;
while ((buffer[i]!='\n')&&(buffer[i]!='\0'))
{
if (buffer[i] != ' '){
tempstr[j] = buffer[i];
j++;
}
else{
tempstr[j]='\0';
printf("%s\n",tempstr);
}
i++;
}
tempstr[j]='\0';
printf("%s\n", tempstr);
}
像
for
事实上,我认为while
循环更适合而不是内部while(fgets(buffer, 500, (FILE*) fp)) {
for (i=j=0; (buffer[i]!='\n')&&(buffer[i]!='\0'); i++)
{
if (buffer[i] != ' '){
tempstr[j] = buffer[i];
j++;
}
else{
j=tempstr[j]='\0';
printf("%s\n",tempstr);
}
}
tempstr[j]='\0';
printf("%s\n", tempstr);
}
循环。
SELECT *
FROM rooms r
JOIN amenities_room am
ON r.id = am.room_id
JOIN amenities a
ON am.amenities_id = a.id
AND a.id IN (2,3)
GROUP BY r.id
HAVING COUNT(*)=2;