我正在尝试创建一个程序,该程序可以从任何文件中获取一些文本并使用下划线'_'
对除空格以外的每个字符进行编码。
例如,假设我们在文件的2行中分别包含"name"
和"code"
这两个词。该程序最终将执行此操作:
_ _ _ _
_ _ _ _
问题是,当我运行代码时,第一行打印了一个额外的下划线,但最后一行正常打印。代码是:
while(1)
{
if(fgets(str, 100, fp) == NULL)
break;
for(i=0; i<strlen(str); i++)
{
if(str[i] != ' ')
{
printf("%c ", '_');
}
else
printf(" ");
}
printf("\n");
}
答案 0 :(得分:4)
这是因为fgets
在文件的每一行的末尾保留换行符,但最后一行不包含换行符。该代码不测试空格字符,仅测试 actual 空格。您可以使用
str [ strcspn(str, "\r\n") ] = '\0';