晨曦到日暮 发表于 2018-1-9 19:29:22

c语言

.编写程序P5.C,输入一个字符,如果是大写英文字母,输出其小写字母;如果是小写英文字母,输出其大写字母;如果不是英文字母,输出“非英文字母”提示。
#include<stdio.h>
int main()
{
        char i;
        if(i>='a'&& i<='z')
        i='i'+32;
        printf("该字符的大写字符:%p",&i);
        else if(i>='A'&& i<='Z')
        i='i'-32;
        printf("该字符的小写字符是:%p",&i);
        else
        printf("该字符是非英文字母");
        return 0;
}
G:\新建文件夹\第七题.cpp(6) : warning C4305: '=' : truncation from 'const int' to 'char'
G:\新建文件夹\第七题.cpp(6) : warning C4309: '=' : truncation of constant value
G:\新建文件夹\第七题.cpp(8) : error C2181: illegal else without matching if
G:\新建文件夹\第七题.cpp(11) : error C2181: illegal else without matching if
Error executing cl.exe.

Kamikid 发表于 2018-1-9 20:02:11

本帖最后由 Kamikid 于 2018-1-9 20:12 编辑

你好,

这段代码运行出现问题是因为if-else块不明确。

阅读完你的代码后,个人认为需要这样修改:

#include<stdio.h>
int main()
{
      char i;
      if(i>='a'&& i<='z'){
                i='i'+32;
                printf("该字符的大写字符:%p",&i);
        }
      else if(i>='A'&& i<='Z'){
                i='i'-32;
                printf("该字符的小写字符是:%p",&i);
        }
      else{
                printf("该字符是非英文字母");
        }
      return 0;
}

另外需注意的是:
1. 不太明白为什么 i = 'i' + 32,如果使用i作为字符变量,可直接写作 i += 32。
2. 大小写转换,第一个if块应为 i = i - 32,第二个else-if块应为 i=i+32。参见ASCII表:https://baike.baidu.com/item/ASCII/309296?fr=aladdin
3. %p会输出十六进制的指针,所以不会输出字符。应该使用%s

晨曦到日暮 发表于 2018-1-9 20:51:49

#include<stdio.h>
int main()
{
      char i;
                printf("请输入一个字符:");
                scanf("%s",&i);
      if(i>='a'&& i<='z')
                {
                        i=i+32;
                printf("该字符的大写字符是:%p",&i);
      }
      else if(i>='A'&& i<='Z')
                {
                i=i-32;
                printf("该字符的小写字符:%p",&i);
      }
      else{
                printf("该字符是非英文字母");
      }
      return 0;
}

晨曦到日暮 发表于 2018-1-9 20:53:06

输出的是数字

BngThea 发表于 2018-1-9 21:51:00

1 小写字母的ascii码比大写的大,所以计算的时候大写转小写应该用减,反之亦然
2 printf输出时不要对变量取地址&,%p改为%c
页: [1]
查看完整版本: c语言