【问题标题】:Changing The Case of A Letter in C?改变 C 中字母的大小写?
【发布时间】:2014-03-14 21:18:17
【问题描述】:

我正在尝试更改用户输入的字母的大小写,并将字母的小写和大写版本存储在变量中。我已经编写了下面的代码,但运行时出现问题。有人指出导致问题的原因吗?

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

char CaseChange(character){

    int lowerc, higherc;


    if(isupper(character)){
        lowerc = tolower(character);
        printf("%s", lowerc);
    }
    else{
        higherc = character;
        printf("%s", higherc);

    }
    return;
}

int main(void){

    char character;

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

    CaseChange(character);
    return 0;
}

【问题讨论】:

  • 您遇到的错误是什么?
  • 在 ASCII 中,您可以通过与 0x20 异或来更改字母的大小写。
  • 您遇到的具体问题是什么?它不编译(因为它不应该),它是否给出了段错误或奇怪的输出(因为它应该)?
  • 对不起,它编译得很好,但是当我运行它时,它在我输入字符后停止工作?就像运行时错误
  • 你应该使用更好的编译器。当printf 参数的类型与相应的格式说明符不匹配时,智能编译器会发出警告。

标签: c case uppercase lowercase


【解决方案1】:

你的代码有两个问题:

  1. printf("%s", ...) 用于输出字符串(char*const char*),而不是单个字符。使用printf("%c", ...)
  2. 你忘了#include &lt;ctype.h&gt;

旁注:您不必使用isupper(x) 检查字符是否为大写。 tolower(x) 将保留已经小写的字符。

【讨论】:

  • 第三个问题:CaseChange没有声明character的类型
  • 第四个问题:scanf() 也应该在character 上使用“address-of”运算符,即&amp;character
  • 并且CaseChange 没有返回任何内容(最好使返回类型为void),并且scanf 没有得到character地址 和忽略其错误代码,printf 格式没有\n,因此如果程序在不检查它启动的最后一个程序的shell 中运行,它的最后一行输出带有\n 然后它打印提示时可能会清除大写字符,或者在提示中行写入(可能会搞砸光标键/滚动行为)。
  • 谢谢大家,这是一个更大的计划的一部分,我一直在犯非常愚蠢的错误,我真的应该发现。
  • 实际上,@Realt,您应该确保在您的编译器中打开警告,并且您应该了解为什么会收到每个警告。
猜你喜欢
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-28
  • 1970-01-01
相关资源
最近更新 更多