`putchar` 的以下两种用法有什么区别?
What is the difference between the following two uses of `putchar`?
我在编写一些代码时,在程序的一部分中得到了意外的输出,这反过来又破坏了整个系统。
代码可以简化和缩短为:
char ch;
printf("Enter Number: ");
while ((ch = getchar()) != '\n') {
if (ch >= 65 && ch <= 67) {
ch = 2;
}
putchar(ch);
}
根据上面的代码,我正在尝试打印用户选择的 character/integer 序列。数字应保持不变,而如果用户输入字母 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的字符,而不是字符2
。 ch=0x32;
在您的第一个版本中可能会起作用,因为 ASCII 50 = 0x32 是字符 2
。 ch='2';
.
更简单(更好,正如 Weather Vane 指出的那样)
在您的第二个版本中,您使用的是 printf("2")
。因此,编译器在处理字符串 "2"
时会为您生成 ASCII 值,就像处理 ch='2';
一样。试试 printf("%d\n",'2');
你应该会看到 50
.
我在编写一些代码时,在程序的一部分中得到了意外的输出,这反过来又破坏了整个系统。
代码可以简化和缩短为:
char ch;
printf("Enter Number: ");
while ((ch = getchar()) != '\n') {
if (ch >= 65 && ch <= 67) {
ch = 2;
}
putchar(ch);
}
根据上面的代码,我正在尝试打印用户选择的 character/integer 序列。数字应保持不变,而如果用户输入字母 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的字符,而不是字符2
。 ch=0x32;
在您的第一个版本中可能会起作用,因为 ASCII 50 = 0x32 是字符 2
。 ch='2';
.
在您的第二个版本中,您使用的是 printf("2")
。因此,编译器在处理字符串 "2"
时会为您生成 ASCII 值,就像处理 ch='2';
一样。试试 printf("%d\n",'2');
你应该会看到 50
.