gpt4 book ai didi

c - 如何在c中加入char数组

转载 作者:行者123 更新时间:2023-12-01 12:25:15 26 4
gpt4 key购买 nike

所以我有一个包含 channel 名称的文本文件,格式如下:

General
Private
Programming
Calculus

我想做的是,如果用户在控制台上输入“/channels”,程序应该以这种格式打印所有 channel :

Channels are : General, Private, Programming, Calculus

我的问题是以这种格式打印 channel ,用逗号分隔它们。有了我现在所拥有的,我可以打印 channel ,但它们是以文本文件中的格式打印的(每行一个 channel 名称)。如果有人可以向我解释这样做的最佳方法是什么,我将非常感激。这是我目前用于打印 channel 的代码:

void get_channels() {
char tmp[50];
FILE *f;
f = fopen("../1part/channels.txt", "r");
if (f == NULL) { perror("Mistake reading: "); exit(1); } ;
while (fgets(tmp, sizeof(tmp), f)) {
printf("%s", tmp);
}

fclose(f);
}

最佳答案

您应该从 fgets() 读取的行中去除尾随的换行符。

void get_channels(void) {
char tmp[50];
FILE *f;
const char *separator = "";

f = fopen("../1part/channels.txt", "r");
if (f == NULL) {
perror("Mistake reading: ");
exit(1);
}
printf("Channels are: ");
while (fgets(tmp, sizeof(tmp), f)) {
/* strip the newline character if present */
tmp[strcspn(tmp, "\n")] = '\0';
printf("%s%s", separator, tmp);
separator = ", ";
}
printf("\n");

fclose(f);
}

注意事项:

  • 如果文件不以换行符结尾,删除该行的最后一个字符将无法正常工作。
  • 如果文件中的一行超过 49 个字符,tmp 也不会以换行结束。去掉最后一个字符也是不正确的,但是上面的代码仍然错误地处理了这种情况,因为这样一行将被分成 2 项。扩大缓冲区是一个简单的解决方案。
  • separator字符串在每个item之前输出,初始化为空字符串,在每个item之后改为", "是产生joined的简单方法没有额外测试的列表。

关于c - 如何在c中加入char数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40547115/

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