c - 我应该从 .txt 中读取文本并将其显示在控制台中,但我的代码不起作用,我的错误在哪里?
问题描述
首先,我被要求在控制台中输入文本并将其打印到 .txt 文件中。然后,在我在 .txt 文件中打印该文本之后,我应该在控制台中打印该文本,并在每行的末尾显示每行有多少个字符。
ex:
Annie is a 8
big girl 7
with big dreams 13
for (int i=0; i<4 ;i++)
{
while ((c=fgetc(p))!=EOF||(c=fgetc(p))!='\n')
{
printf("%c",c);
n++;
}
printf("%d",n);
}
这部分是有问题的。在我输入文本并在 .txt 文件中打印后,我尝试在控制台中逐个字符地打印出来,“n”变量应该是每个字母的计数器。我的错误在哪里?如果需要,我可以显示整个代码。
解决方案
你没有忘记倒带(或 fseek)指令吗?如果您编写 .txt 文件并且在尝试不使用 rewind(或 fseek 或 close/fopen)指令读取它之后,文件位置在文件末尾。所以没有要读取的字符,因为您已经在文件末尾。尝试使用和不使用倒带指令的以下代码。
#include <stdio.h>
#include <stdlib.h>
int main() {
char c = '\0';
int n;
FILE * p;
p=fopen("myfile.txt","w+");
fprintf(p,"Annie is a\nbig girl\nwith big dreams");
rewind(p);
while((c=fgetc(p))!=EOF) {
if (c=='\n') {
printf(" : %d\n",n);
n=0; }
else {
printf("%c",c);
if (!isspace(c)) n++;
}
}
printf(" : %d\n",n);
}
推荐阅读
- javascript - Javascript:在 Chrome 和 Firefox 中解析 unicode 字符串会产生不同的结果
- javascript - 我试图在向该对象添加新属性之前将对象推送到数组,但它直接更新数组
- css - 主容器上带有 flexgrow 的水平可滚动 div
- flutter - 如何在flutter中从JSON文件中获取数据
- linux - 如何在bash编程中的循环内对文件使用stat
- swift - 我可以将 Swift 包管理器限制在特定平台上吗?
- postgresql - 如何从其他服务器的 dblink 连接?
- json - 使用下拉列表中的数据在 Node-red 上的 SNMP-set 中设置值
- css - 如何在 ant-design 组件中使用 css-in-js?
- vb.net - vb.net My.Settings 类类别和描述