高原苦力 发表于 2012-8-15 18:55:42

字母大小写转换

这是小甲鱼的源文件。运行后输入大写A提示输入有误, 请重新输入一个字母输入其他大写字母正常。请帮忙看看错在哪?
#include <stdio.h>
#include <conio.h>
void main()
{
      char ch, temp;
      printf("请输入一个字母: \n");
      ch = getchar();
      temp = getchar();
      while( !(ch>'A' && ch<'z') || (ch > 'Z' && ch < 'a') )
      {
         printf("输入有误, 请重新输入一个字母: \n");
         ch = getchar();
      }
      if( ch & 32 )   
      {
            ch = ch & 223;// 使第五位为0,变大写
      }
      else
      {
            ch = ch | 255;// 使第五位为1,变小写
      }
      putchar(ch);
      printf("\n");
}

高原苦力 发表于 2012-8-15 19:18:23

找到原因了。。。。while( !(ch>'A' && ch<'z') || (ch > 'Z' && ch < 'a') )
这个部分错了。应该是加上“=”

高原苦力 发表于 2012-8-15 19:19:33

找到原因了。。。。while( !(ch>'A' && ch<'z') || (ch > 'Z' && ch < 'a') )
这个部分错了。应该是加上“=”

zquchs 发表于 2012-8-15 20:05:39

本帖最后由 zquchs 于 2012-8-15 20:12 编辑

判断好像有点问题,修改后:
#include <stdio.h>
#include <conio.h>
void main()
{
      char ch, temp;
      printf("请输入一个字母: \n");
      ch = getchar();
      temp = getchar();

      while( (ch>'A' && ch<'z') && (ch > 'Z' && ch < 'a') )//这里就是清除掉A到Z与a到z之外的所有字符,
                                                                              //while(ch <'A'||ch >'Z'&&ch < 'a'||ch >'z')这样也可以

       {                                                                              
                printf("输入有误, 请重新输入一个字母: \n");
                ch = getchar();
      }
      if( ch & 32 )   
      {
                ch = ch & 223;// 使第五位为0,变大写
      }
      else
      {
                ch = ch | 32;// 使第五位为1,变小写,是
                        // |0010 0000 == | 32<!--EndFragment-->
      }
      putchar(ch);
      printf("\n");
}

绝影&瞬风 发表于 2012-8-24 10:00:32

while( !(ch>'A' && ch<'z') || (ch > 'Z' && ch < 'a') )这里应该改 把||改为&&

高原苦力 发表于 2012-10-14 19:21:06

绝影&瞬风 发表于 2012-8-24 10:00 static/image/common/back.gif
while( !(ch>'A' && ch 'Z' && ch < 'a') )这里应该改 把||改为&&

谢谢你的回复。我好久之前的问题了。没想到能有人回答。。。。

渴望飞翔的鱼 发表于 2012-10-17 17:23:18

好像大写改小写都不对吧!除了A外提示错误,其他都没有改小写呢!

键盘鼠标 发表于 2012-11-14 16:14:04

四楼是对的哈哈

夏日炎炎 发表于 2012-12-30 18:13:02

你们都不对,看看我写的。注意while循环条件和大小写转换机制,新增清除缓冲区函数。

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
        char ch;
        printf("请输入一个字母: \n");
        ch = getchar();
        fflush(stdin);//清除缓冲区
       
        while( !(ch>='A' && ch<='z') || (ch > 'Z' && ch < 'a') )//当ch不是 A~Z 或 a~z 时循环重新输入                                                                           
        {                                                                              
                printf("输入有误, 请重新输入一个字母: \n");
                ch = getchar();
                fflush(stdin); //清除缓冲区
        }
        if( ch & 32 )   //如果是小写
        {
                ch = ch & 223;// 第五位置0,变大写
        }
        else
        {
                ch = ch | 32;// 第五位置1,变小写
        }
        putchar(ch);
        printf("\n");
}

少先队队长 发表于 2017-6-2 21:07:42

本帖最后由 少先队队长 于 2017-6-2 21:09 编辑

这样可以,主要看判断是否为字母那里,看着ascii码表就知道怎么写了

#include <stdio.h>
#include <conio.h>
void main()
{
      char ch;
      printf("请输入一个字母: \n");
      ch = getchar();
      

      while( (ch<'A' || ch>'z')|| (ch > 'Z' && ch < 'a') )
       {                                                                              
                printf("输入有误, 请重新输入一个字母: \n");
                ch = getchar();
      }
      if( ch & 32 )   
      {
                ch = ch & 223;
      }
      else
      {
                ch = ch | 32;
                        
      }
      putchar(ch);
      printf("\n");
}

kailugaji 发表于 2018-3-5 17:41:42

本帖最后由 kailugaji 于 2018-3-5 18:04 编辑

#include<stdio.h>
#include<stdlib.h>
void main(){
    char ch,t;
    printf("请输入一个字母:\n");
    ch=getchar();
    t=getchar();
    while(!(ch>='A' && ch<='z') && !(ch>='Z' && ch<='a')){
      printf("输入有误,请重新输入一个字母:\n");
      ch=getchar();
    }
    if(ch & 32){
      ch=ch & 223;//使第5位为0,变大写
    }
    else{
      ch=ch | 32;//使第5位为1,变小写
    }
    putchar(ch);
    printf("\n");
    //ch=getchar();
    //putchar(ch);
}

kailugaji 发表于 2018-3-5 18:03:41

#include<stdio.h>
#include<stdlib.h>
void main(){
    char ch,t;
    printf("请输入一个字母:\n");
    ch=getchar();
    t=getchar();
    while(!(ch>='A' && ch<='z') && !(ch>='Z' && ch<='a')){
      printf("输入有误,请重新输入一个字母:\n");
      ch=getchar();
    }
    if(ch & 32){
      ch=ch & 223;//使第5位为0,变大写
    }
    else{
      ch=ch | 32;//使第5位为1,变小写
    }
    putchar(ch);
    printf("\n");
    //ch=getchar();
    //putchar(ch);
}

757129128 发表于 2018-3-5 20:54:23

while( (ch>'A' && ch<'z') && (ch > 'Z' && ch < 'a') )
//这样就可以了
页: [1]
查看完整版本: 字母大小写转换