gpt4 book ai didi

将输入从 `getchar()` 复制到另一个变量

转载 作者:行者123 更新时间:2023-12-04 02:37:26 31 4
gpt4 key购买 nike

在 K&R 书中的以下代码示例中,如果我将 putchar(c) 替换为 printf("%c", c),代码的工作方式相同。但是,如果我用 printf("%d", c) 替换它,它会给出乱码输出。

#include <stdio.h>
int main() {
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}

来自 here ,我了解到 getchar() 将标准输入转换为 8 位字符,其值范围为 0 到 255。

现在我想在一行中使用 putchar(c)printf("%d", c) 打印 c 的值> 在另一行。所以我写了下面的代码:

#include <stdio.h>

int main() {
int c, b;

c = getchar();
b = c;
while (c != EOF && c != 10) {
printf("%c",c);
c = getchar();
}
printf("\n");
while (b != EOF && b != 10) {
printf("%d\t",b);
b = getchar();
}
}

我使用条件 c != 10 因为 getchar() 将换行符读取为 10。我希望代码能像

$ ./a.out
783
783
55 56 51

但程序终止为

$ ./a.out
783
783
55

我知道 getchar() 从 stdin 获取输入,而变量 b 不是 stdin。那么我应该如何将变量 c 复制到 b 以便我的程序按预期运行?

最佳答案

问题是您的代码没有(而且不能,就目前而言)“记住”您在第一个循环中提供的输入。所以,在你完成那个循环之后,你的第二个循环想要读入 b 的字符(在它输出第一个值之后,这是从之前的 b = c 行)。

所以,在输出55(字符7的整数)之后,就在等待进一步的输入。

可能获得所需输出的最简单方法是使用输入字符的数组。然后,您可以在读取它们时输出 %c 值(和以前一样),然后在后续的 for 中使用 %d 格式重新运行输出 循环。

这是一个演示,可以实现我认为您想要的效果:

#include <stdio.h>
#define MAXINS 20 // Set to the maximum number of input characters you want to allow
int main()
{
int c[MAXINS];
int i = 0, n = 0;
c[0] = getchar();
while (i < MAXINS && c[i] != EOF && c[i] != 10) {
printf("%c", c[i]);
c[++i] = getchar();
++n;
}
printf("\n");
for (i = 0; i < n; ++i) {
printf("%d\t", (int)(c[i]));
}
return 0;
}

随时要求进一步澄清和/或解释。

编辑:关于您第一段中的观点,“但是如果我用 printf("%d", c) 替换它,它会给出乱码输出。”好吧,当我尝试以下代码并输入 783 然后按回车键(生成换行符)时,我得到了预期的 55565110 作为输出:

int main()
{
int c;
c = getchar();
while (c != EOF) {
printf("%d", c);
c = getchar();
}
return 0;
}

这可能看起来像乱码,但它与您在后面的代码中“预期”的输出相同,只是没有空格,并且为换行符添加了 10

关于将输入从 `getchar()` 复制到另一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61040009/

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