1

尝试创建一个简单的 C 字符到 ASCII 转换器

但结果在每个 printf 之后打印“10”。

有什么想法可以解决这个问题吗?

编译器:mingw64/gcc

来源:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main() {
    char argc;
    printf("Enter for ASCII: ");
    do {
        scanf("%c", &argc);
        printf("%d\n", argc);
    } while (argc != 'Z');
}

输出:

$ ./ascii.exe 
Enter for ASCII: A 
65
10
S
83
10
D
68
10
V
86
10
X
88
10
Z
90
4

1 回答 1

2

scanf使用格式字符串"%c"读取所有字符,包括空格字符,例如'\n'对应于按下的键 Enter 的换行符。要跳过空格字符,您可以在格式字符串前面加上空格,例如

    scanf( " %c", &argc);
           ^^^^^

C 标准 7.21.6.2 fscanf 函数

5 由空白字符组成的指令通过读取输入直到第一个非空白字符(仍然未读取)或直到无法读取更多字符来执行。

或者您可以通过以下方式在循环中忽略它

do {
    scanf("%c", &argc);
    if ( argc != '\n' ) printf("%d\n", argc);
} while (argc != 'Z');
于 2021-11-21T10:18:43.367 回答