【问题标题】:Get "highest" character in C获取C中的“最高”字符
【发布时间】:2015-09-15 14:39:15
【问题描述】:

我试图编写一个程序来获取一个人输入的最高字符。我制作了一个程序,它可以毫无问题地获得最高数量的工作,但是对于字符它不起作用。这是我的代码:

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

int main(int argc, const char * argv[]) {
    char characters[5];
    char highest = "a";

    printf("Please enter five characters: \n");
    for (int i = 0; i <= 4; i+=1) {
        scanf("%c", characters[i]);
    }

    printf("These are the characters you entered: ");

    for (int i = 0; i <= 4; i+=1) {
        printf("%c  ", characters[i]);
    }

    for (int i = 0; i <= 4; i+=1) {
        if (characters[i] > highest) {
            highest = characters[i];
        }
    }

    printf("\nThe highest character is %c", highest);
}

我做错了什么?

【问题讨论】:

  • char highest = "a"; 真的编译了吗?
  • 好吧,在 Xcode (Macintosh) 上它确实可以编译。为什么是“a”而不是“a”?
  • 是的,因为您将 String 分配给 char 变量
  • @S.Eberl 请不要将 C 问题标记为 C++。
  • 如果它“不起作用”,那么显而易见的解决方案就是让它起作用。如果您想要比这更好的答案,请具体告诉我们什么不起作用您遇到什么错误等。

标签: c for-loop printf


【解决方案1】:

您尝试将字符串文字 "a" 转换为 char。您应该使用字符文字。

char highest = "a";
//should be
char highest = 'a';

此外,scanf 需要一个指针来存储读取结果。

scanf("%c", characters[i]);
//should be
scanf("%c", &characters[i]);

Live Demo

【讨论】:

  • 解决了问题,谢谢!现在,又出现了一个问题。它在我的 Mac 上只读取三个而不是五个字符。相反,现场演示效果很好。
  • 怎么办?
  • 不要输入空格。
  • 如果我“想”输入空格?
  • 您可以在格式字符串中添加一个空格:" %c"。这是一个不同的问题。
【解决方案2】:

char highest = "a";不正确,应该是char highest = 'a';才能编译。

【讨论】:

  • 在 Xcode (Mac OS X) 上,它可以双向编译。但是还是不行。
【解决方案3】:

两个问题:

字符文字用单引号指定,而不是双引号。所以这个:

char highest = "a";

应该是:

char highest = 'a';

此外,scanf%c 格式说明符需要一个指向 char 的指针,但您传递给它的是 char

所以这个:

scanf("%c", characters[i]);

应该是:

scanf("%c", &characters[i]);

这应该可以解决您的问题。

【讨论】:

  • 函数的所有参数都是按值传递的。如果你只是传入一个char,那么scanf 将无法修改它。通过传递char的地址,scanf可以取消引用指针并修改它指向的内存位置,即调用函数中的数组元素。
【解决方案4】:

还有一个尚未解决的潜在问题。在 C 中,保证表示 digits 的字符('0', '1', ..., '9')是有序的,但不能保证 字母 ('a', 'b', ...) 以任何特定顺序排列。

【讨论】:

  • 'a' 的 ASCII 小于 'b' 或 'c'。这还不够(如果您忘记了区分大小写的问题)?
  • 使用EBCDIC,注意'J'+1不等于'K'('K'等于'J'+6)
  • 为什么这对我很重要? Mac OS X 也使用 ASCII。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 2011-09-18
相关资源
最近更新 更多