gpt4 book ai didi

c - C 中 while 循环条件内 getc() 和 getchar() 之间的交换

转载 作者:行者123 更新时间:2023-11-30 20:24:48 25 4
gpt4 key购买 nike

在用 C 语言编写 Unix wc 工具的简单实现时,我想知道是否有某种方法可以编写我的函数以在 getchar()getc() 在 while 循环条件中,无需复制粘贴整个循环或编写一个几乎相同的新函数。

基本上,我希望通过使函数更加灵活来避免代码重复,以便它可以从文件或 stdin 中读取。谢谢!

void count (char *file) {
FILE *fp = fopen(file, "r");
int c;
bool in_word = false;

while((c = getc(fp)) != EOF) { //want to easily swap getc() with getchar() here
char_count++;
if (c == '\n') {
line_count++;
}
if ((c == ' ') || (c == '\t') || (c == '\n')) {
in_word = false;
}
else if (in_word == false) {
in_word = true;
word_count++;
}
}
fclose(fp);
}

最佳答案

什么情况下你想在 getc() 和 getchar() 之间进行交换?

如果在编译时已知,则可以使用这样的预处理器宏

#define USE_GET_C TRUE

#if (USE_GET_C == TRUE)
while((c = getc(fp)) != EOF) { //want to easily swap getc() with getchar() here
#else
while((c = getchar()) != EOF) {
#endif
.. remaining code below

但是,如果条件仅在运行时已知,则您将需要一个包装函数,该函数将采用一个参数来告诉您是使用 getc 还是 getchar。

类似这样的事情。

int wrapper(bool use_getc, FILE* fp);

wrapper(bool use_getc, FILE* fp)
{
if (use_getc == TRUE)
return(getc(fp);
else
return(getchar());
}

关于c - C 中 while 循环条件内 getc() 和 getchar() 之间的交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32306753/

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