gpt4 book ai didi

c - C 新手,试图更好地理解字符数组、指针、读取文件等

转载 作者:行者123 更新时间:2023-11-30 19:40:33 28 4
gpt4 key购买 nike

好吧,我是第一次使用 C 来处理 linux 和 emacs,并且来自 eclipse 中的相当初级的 java 编程,我的新 CS 类(class)确实令人畏惧。这么多的东西被扔给我,好像我已经知道了......

无论如何,我正在做的作业的当前部分涉及从文件中读取文本(通过将文本文件作为标准输入传输到我的程序中来实现)。目前我有三个函数,一个是在文件中读取/调用其他函数的主函数,一个是用 *char beg 和 *char end 作为参数反转单个单词的顺序的函数(apple 变成 elppa),以及一个函数反转一行单词中每个单词的顺序,调用前面的函数并以 char *str 作为参数。

我在读取主要方法中的文件时遇到了困难,无法轻松地利用这些函数。这是我当前如何阅读它们的片段,但正如你所看到的,我还没有找到一种方法来存储一行单词并将其发送到我的函数中(我需要逐行反转,所以我可以'只是将每个字符添加到一个长数组中)

enter code here``

char line[8192]
int location = 0;

FILE *in = stdin;
int buff = 0;

while (buff = fgetc(in))
{
fprintf(stderr, "Character is: %d '%c' \n", buff, (char)buff);
if (buff == EOF)
{
break;
}

line[location] = (char)buff;
location++;

}
line[location] = '\0';

最佳答案

如果你想得到整行,你可以这样做:

char line[MAX_LINE_SIZE];
fscanf(in, "%[^\n]", line);
//do whatever you need with the line
fscanf(in, "%[\n]", line);

第一个 fscanf 调用读取整行并存储在变量 line 中。但它并没有跳过那条线!如果您再次使用它,它将存储完全相同的行。

第二个 fscanf 调用就是为了这个:它将 '\n' 存储在变量 line 中,并跳过您之前读取的行。

如果需要,您可以创建另一个缓冲区来获取“\n”并跳过该行:

char garbage[2];
fscanf(in, "%[\n]", garbage);

我希望这会有所帮助。

关于c - C 新手,试图更好地理解字符数组、指针、读取文件等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35237367/

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