c - 如何做一个将文件中单词的第一个字符大写的 C 程序?
问题描述
#include <stdio.h>
int main()
{
FILE *fp;
int i;
int pos;
fp=fopen("test.txt","r+");
fseek(fp,0,SEEK_END);
pos=ftell(fp);
char ch[pos-1];
fseek(fp,0,SEEK_SET);
ch[0]=ch[0]-32;
i=0;
while(ch[i]=fgetc(fp)!=EOF){
if(ch[i]!=' '){
fseek(fp,1,SEEK_CUR);
i++;
}
else{
fseek(fp,1,SEEK_CUR);
i++;
ch[i]=fgetc(fp);
ch[i]=ch[i]-32;
fprintf(fp,"%c",ch[i]);
}
}
fclose(fp);
}
我想制作将文件中单词的第一个字符大写的 C 程序。但是当我运行此代码时,.txt 文件出错了。fgetc() 的用法是错误的吗?这个问题我的错在哪里?fscanf 是移动光标吗?
解决方案
在你的 while 循环的条件下,你有
ch[i] = fgetc(fp) != EOF
由于 != 的优先级高于 =,这相当于
ch[i] = (fgetc(fp) != EOF)
哪个不评估字符,而是比较中的 0 或非零值。
在我看来,一个更好的方法是读取整个字符串,修改它,然后以写入模式再次打开文件并写回,如果你要为内容分配一个数组。
推荐阅读
- r - stat_poly_eq 中的 Gamma(log)
- python - Sqlalchemy 引发 'NotImplementedError: Operator 'getitem' is not supported on this expression' When using 'hybrid_property' in mysql.SET
- r - 将 ggplot2 与 R 中的基图相结合:外观和语法
- angular - 将 @Effect 转换为 createEffect NGRX
- sql - 如何使用函数 extract() 在 YYYY-MM 上获取日期
- sqlite - 为什么对视图的 F3 数据库查询不能使用 sqlite
- sql - BigQuery - 从重复和嵌套的字段中提取某些列
- tkinter - TKINTER 中的错误 - 内部填充(ipadx、ipady)仅适用于框架的右侧和底部
- java - Spring boot jpa 标识,新行的ids向前跳跃10K
- php - 使用 PHP 时获取 SQL 查询的输出