首页 > 解决方案 > C中的输出发生了奇怪的事情

问题描述

所以问题是我必须在两个字符之间打印一个值(十进制、八进制、十六进制)。

代码是:

#include <stdio.h>

int main (void) {
    char a, b;
    int z, temp;
    printf("Enter first character: ");
    scanf("%s", &a);
    printf("Enter second character: ");
    scanf("%s", &b);
    if (a>b){
        temp = a;
        a = b;
        b = temp;

    }

    printf("ASCII code difference: %d", b-a);
    for (int i = a; i <=b; i++){
        printf("\n%c %d %o %X", i, i, i, i);
    }
    return 0;
}

和输出:

Enter first character: a
Enter second character: z
ASCII code difference: 122
 0 0 0
 1 1 1
 2 2 2
 3 3 3
 4 4 4
........
y 121 171 79
z 122 172 7A

但它应该是:

Enter first character: a
Enter second character: z
ASCII code difference: 122
a 97 141 61
b 98 142 62
c 99 143 63
........
y 121 171 79
z 122 172 7A

我能用它做些什么吗?我在 debian wsl2 中使用 gcc 编译它。提前致谢!

标签: cgcc

解决方案


问题是您使用%s的是用于读取字符串而不是%c(从流中读取单个字符)。因此,您需要使用%c它从流中读取单个字符,但它会在流中留下一个换行符,因此您需要使用 %c它忽略最后一个输入中留在流中的任何前导空白字符。

#include <stdio.h>

int main (void) {
    char a, b;

    printf("Enter first character: ");
    scanf("%c", &a);

    printf("Enter second character: ");
    scanf(" %c", &b);

    if (a > b) {
        char temp = a;
        a = b;
        b = temp;
    }

    printf("ASCII code difference: %d", b - a);

    for (int i = a; i <= b; i++)
        printf("\n%c %d %o %X", i, i, i, i);

    return 0;
}

推荐阅读