【问题标题】:compare character based on ASCII precedence根据 ASCII 优先级比较字符
【发布时间】:2018-10-15 02:50:30
【问题描述】:

我做了一个比较三个字符的代码,并根据 ASCII 数字从高到低对其进行排序。第一个输入是很多情况要解决,然后输入三个字符进行排序。例如,如果我们输入& ^ %,我们期望的输出是Case #1: % & ^

#include <stdio.h>

int main(){
    int cases, counter = 1;
    char ch1, ch2, ch3, storage;
    scanf("%d", &cases);
    getchar();

    while(counter <= cases){
        scanf("%c %c %c", &ch1, &ch2, &ch3);

        //process

        while(ch1 < ch2 < ch3){
            if(ch1 < ch2){
                storage = ch1;
                ch1 = ch2;
                ch2 = storage;
            }
            if(ch2 < ch3){
                storage = ch2;
                ch2 = ch3;
                ch3 = storage;
            }
        }

        //end process

        printf("case #%d: %c %c %c\n", counter, ch1, ch2, ch3);
        counter++;
    }

    return 0;
}

但在我输入三个字符后它卡住了,它不会显示输出,我无法为下一个案例输入任何字符。

【问题讨论】:

  • 使用调试器单步调试代码。
  • while (ch1 &lt; ch2 &lt; ch3) 可能不会像你想的那样,特别是如果你先学习了Python。在 C 中,它将ch1ch2 进行比较,并产生一个值 0 或 1;然后将该值与ch3 进行比较。几乎总是,0 和 1 都小于ch3,因此循环将继续,继续,继续,继续,直到你厌倦为止。
  • 启用 编译器警告(例如,对于 gcc/clang 的最小值 -Wall -Wextra,对于 VS (cl.exe) 的最小值 /W3)并且在编译之前不要接受代码警告。阅读并理解编译器告诉你的内容。
  • "我输入三个字符后卡住" --> 尝试" %c %c %c" 而不是"%c %c %c"(添加空格)。 ch1 &lt; ch2 &lt; ch3 也是个问题。
  • 如果优先级是指 C 运算符优先级,那么赋值是无稽之谈。一元地址运算符&amp; 的优先级高于模数%,而模数&amp; 的优先级又高于位与&amp;

标签: c character scanf


【解决方案1】:

您陷入了 while 循环,请尝试重新格式化比较。

while((ch1 < ch2) || (ch2 < ch3))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 2021-08-27
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多