gpt4 book ai didi

c - `putchar` 的以下两种用法有什么区别?

转载 作者:行者123 更新时间:2023-11-30 16:49:41 26 4
gpt4 key购买 nike

我正在编写一些代码,在程序的某个部分得到了意外的输出,这反过来又扰乱了整个系统。

代码可以简化并缩短为:

char ch;
printf("Enter Number: ");

while ((ch = getchar()) != '\n') {
if (ch >= 65 && ch <= 67) {
ch = 2;
}
putchar(ch);
}

根据上面的代码,我试图打印用户选择的字符/整数序列。数字应保持不变,而如果用户输入字母 A,则应打印 2

预期输出

Enter Number: 23-AB
23-22

实际输出

Enter Number: 23-AB
23-☺☺

遇到这个问题后,我决定调整一些东西,并提出了以下完美运行的代码。它使用相同的方法但产生不同的输出:

char input;
printf("\nEnter Number: ");

while ((ch = getchar()) != '\n') {

switch (toupper(ch)) { //toupper function not really needed since I am expecting the user to enter upper-case letters ONLY
case 'A': case 'B': case 'C':
printf("2");
break;
default:
putchar(ch);
}
}

预期输出

Enter Number: 23-AB
23-22

实际输出

Enter Number: 23-AB
23-22

我无法理解为什么我无法将第一个代码中输入的字符的 ASCII 值转换为单个整数。造成这种输出差异的原因是什么?我只是将控制表达式的类型从 if-statement 更改为 switch-statement (或者我认为是这样)。如何更改第一个代码以提供与第二个代码相同的输出?

最佳答案

在第一个版本中,设置ch=2;使ch成为ASCII值为2的字符,而不是字符2ch=0x32; 在您的第一个版本中可能会起作用,因为 ASCII 50 = 0x32 是字符 2。更简单(而且更好,正如 Weather Vane 指出的那样)的是 ch='2';

在第二个版本中,您使用的是 printf("2")。因此,编译器在处理字符串 "2" 时会为您生成 ASCII 值,就像处理 ch='2'; 一样。尝试 printf("%d\n",'2');,您应该会看到 50

关于c - `putchar` 的以下两种用法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42494835/

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