gpt4 book ai didi

c - 在C中将格式化文件读入char数组

转载 作者:行者123 更新时间:2023-12-04 11:11:33 24 4
gpt4 key购买 nike

我有一个非常简单的问题。我需要将文件的内容读入 C 中的 char 数组。该文件将始终被格式化为两列字母,例如:

A B
B C
E X
C D

每个字母代表图上的一个顶点,我稍后会处理它。我学习过使用 C++ 和 Java 进行编程,但我并不是特别熟悉 C。

导致我无法弄清楚的问题是文件有多行。我需要每个字母在数组中占据一个位置,所以在这种情况下它是:array[0] = 'A', array[1] = 'B', array[2] = 'B', array[3] = 'C' 等等。

最终我需要数组不包含重复项,但我可以稍后处理。这学期早些时候我写了一个程序,它从一个文件中读取一行整数并且运行良好,所以我复制了大部分代码,但在这种情况下它不起作用。这是我到目前为止所拥有的:

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
int i;
int count = 0;
char * vertexArray;
char ch = '\0';

// open file
FILE *file = fopen( argv[1], "r" );

// count number of lines in file
while ((ch=fgetc(file)) != EOF)
if(ch == '\n') count++;

// numbers of vertices is twice the number of lines
int size = count*2;

// declare vertex array
vertexArray = (char*) calloc(size, sizeof(char));

// read in the file to the array
for(i=0; i<size; i++)
fscanf(file, "%c", &vertexArray[i]);

// print the array
for(i=0; i<size; i++)
printf("%c\n", vertexArray[i]);

fclose( file );
}

我知道我需要测试文件的打开和读取是否正确等等,但我会在稍后添加。现在只是尝试读取数组。在这种情况下,我的输出是 8 个空行。任何帮助都会很棒!

最佳答案

当您循环遍历文件以计算行数时,文件指针已经位于 EOF 处,因此您不会将任何内容读入数组。充其量它会与您的最后一个字符具有相同的值,但它可能会向您显示段错误。

你想做的是

rewind(file);

在你之前

//read file into the array

然后您将从文件的开头开始。另外,我不确定 fgetc 如何处理行尾,因为通常有一个尾随 '\0' 坐在那里。另一种方法是像这样使用 fscanf

i = 0;
while (!feof(file)){
fscanf(file, "%c %c", &vertexArray[i], &vertexArray[i+1]);
i++;
}

函数 feof(FILE *) 检查是否设置了 EOF 标志,并在您点击 EOF 时停止。

更新: 我认为如果您将 ch 定义为 int ch,它应该可以工作。看看this线。

这是对我有用的代码:

int main (int argc, char *argv[])
{
int i;
int count = 0;
char * vertexArray;
int ch, size;

FILE *file;
file = fopen(argv[1], "r");

while ((ch = fgetc(file) != EOF))
count++;

size = count*2;
vertexArray = (char*) calloc(size, sizeof(char));
rewind(file);

for(i=0; i<size; i++)
fscanf(file, "%c ", &vertexArray[i]);

for(i=0; i<size; i++)
fprintf(stderr, "%c\n", vertexArray[i]);

fclose(file);

新编辑 注意 fscanf(file, "%c ", &vertexArray[i]); 之后的空格。这告诉 C 你想在读取字符后跳过所有的空白。如果没有空格,它也会将空格读取为一个字符。这应该可以解决它。

关于c - 在C中将格式化文件读入char数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13394102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com