我试图从一个文件中写的文本中打印出空格和新行的位置,但它什么也不打印,我不能弄清楚问题是什么。
这只是问题的一部分,所以请忽略其他定义的东西,我还没有使用。
文本文件:
Mi illumino di immenso
Illumino di immenso
Di immenso
IMMENSO
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define N 100
int main()
{
FILE *file,*file2;
file=fopen("file","r");
if(file==NULL || file2==NULL)
{
printf("Error");
exit(1);
}
int i=0,j=0,k=0,p=0;
int v[50];
char str[N];
int iteration=0;
char str1[N];
while(fscanf(file,"%s",str)!=EOF)
{
for(i=0; i<strlen(str); i++)
{
if(str[i]==' ')
{
v[j]=i;
j++;
}
if(str[i]=='/n')
{
v[j]=i;
j++;
}
}
}
for(i=0;i<j;i++)
{
printf("%d",v[i]);
}
return 0;
}
1条答案
按热度按时间rvpgvaaj1#
fscanf(..., "%s", str)
读取白色分隔的单词,因此str
永远不会包含空格或换行符。您可以使用%[^\n]\n
读取带有空格的字符串,但str
不会包含换行符。您也可以使用%[a-zA-Z \n]
指定您想要的内容。1.“\n”应为“/n”。
1.如果你使用
fgets()
而不是fscanf()
,你将重置每行的i
。不清楚这是否是你想要的。str[N]
但v[50]
最坏的情况是str
,它由所有空格和/或换行符组成,所以它应该是v[N]
。1.在最后一个循环中,您不使用任何字段分隔符。
1.空格和换行符做同样的事情,所以组合这两个
if
条件。1.删除未使用的变量(
file2
、k
、p
)。1.关闭文件。
1.由于格式化,代码很难阅读。
示例输出: