c - C - 从 .txt 文件中读取并将字符存储在数组中
问题描述
我有一个名为“exampleWheel.txt”的 .txt 文件,其中包含 10 个字符:A、M、W、O、S、E、G、L、P、H。
我试图将字符存储在一个数组中,以便以后可以根据每个字符在数组中的位置来引用它。
这是我的尝试:
#include <stdlib.h>
int main()
{
FILE * fPointer;
fPointer = fopen("exampleWheel.txt","r");
int i = 0;
char singleLine[150];
const char *array[10];
while(!feof(fPointer)){
fgets(singleLine, 150, fPointer);
array[i] = singleLine;
printf("%d\n",&array[i]);
printf("%s\n", array[i]);
i++;
}
fclose(fPointer);
printf("array[0] = %c\n", array[0]);
printf("array[1] = %c\n", array[1]);
return 0;
}
while 循环中的 printf 语句返回正确的输出,但 while 循环外的两个 printf 语句返回错误的结果。
即printf("array[0] = %c\n", array[0])不返回数组的第一个字符
请告诉我如何改进我的代码。先感谢您!!
解决方案
- 打开文件时,您应该始终检查错误并处理它们,例如通知用户并以错误代码结束程序
- 尝试从文件中读取并且不要预先检查 feof,请阅读为什么“while (!feof (file))”总是错误的?
- 该赋值
array[i] = singleLine;
存储了一个指向 singleLine 字符数组的指针,但它将被循环中的下一个 fgets 调用覆盖。作为替代方案,您可以在此处使用例如二维数组并简单地保存第一个字符。 - 你应该确保不要读更多的行然后你有空间 in
array
,否则你会写到数组的末尾
您稍作修改的代码可能如下所示:
#include <stdlib.h>
#include <stdio.h>
#define MAX_LINES 10
int main() {
char singleLine[150];
char array[MAX_LINES][2];
FILE *fPointer;
if ((fPointer = fopen("exampleWheel.txt", "r")) == NULL) {
fprintf(stderr, "can't open file");
exit(1);
}
int i = 0;
while (i < MAX_LINES && fgets(singleLine, 150, fPointer)) {
array[i][0] = singleLine[0];
array[i][1] = '\0';
printf("%d\n", *array[i]);
printf("%s\n", array[i]);
i++;
}
fclose(fPointer);
printf("array[0] = %c\n", array[0][0]);
printf("array[1] = %c\n", array[1][0]);
return 0;
}
推荐阅读
- python - 我无法在 Flask 上使用 SQLAlchemy 创建表
- reactjs - 当用户未通过身份验证时反应闪烁的私有路由
- javascript - 将 JS 链接到 Google 应用程序脚本以运行基于 Web 应用程序上的复选框的功能
- python - AttributeError:“列表”对象在发送电子邮件时没有属性“编码”
- bash - 如何在bash中查找列值并替换
- pyspark - PYSPARK:查找不包括前 1 个百分位数据的变量的平均值
- amazon-web-services - AWS Amplify 在创建 DynamoDB 表后创建全局二级索引
- python - 如何从具有多行的文本文件创建整数列表?
- gatsby - 盖茨比网站的 Netlify 构建失败。图片
- typeorm - TypeORM 订阅者 AfterInsert 找不到记录