鱼C论坛

 找回密码
 立即注册
查看: 1629|回复: 11

[已解决]求纠错!为啥会打印两次

[复制链接]
发表于 2022-9-21 20:37:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下:
#include<stdio.h>
int main()
{
        bool x=1;
        printf("请输入一个大写或小写字母:\n");
        do{
        char a=getchar();
        if(a<=90&&a>=65)
        {
                printf("%c",a+32);
                x=0;
        }
        else if(a<=122&&a>=97)
        {
                printf("%c",a-32);
                x=0;
        }
        else
        {
                printf("请输入一个大写或小写字母!!!!!\n");
        }
        }while(x);
       
        return 0;
}

自己写的把字母大小写转换的程序,但是比如输入\,会打印两次请输入一个大写或小写字母!!!!!
不知道为啥,求助



最佳答案
2022-9-21 21:17:59

问题 在这
        char a=getchar();
                getchar(); // 消除最后的 回车换行(\n)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-21 20:48:14 | 显示全部楼层
else
        {
                printf("请输入一个大写或小写字母!!!!!\n");
x=0;
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-21 20:54:00 | 显示全部楼层
ba21 发表于 2022-9-21 20:48
else
        {
                printf("请输入一个大写或小写字母!!!!!\n");

但是这么改的话我如果输入\就会直接退出循环,但是我加while循环的想法就是如果输入的不是字母就继续输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-21 20:56:04 | 显示全部楼层
  1. #include<stdio.h>

  2. int main(void)
  3. {
  4.         char c                                                                            ;
  5.         printf("请输入一个句子 :")                                                       ;
  6.         for(; (c = getchar()) != '\n' ;) {
  7.                 c = (c >= 'A' && c <= 'Z') ? c + 32 : (c >= 'a' && c <= 'z') ? c - 32 : c ;
  8.                 putchar(c)                                                                ;
  9.         }
  10.         printf("\n")                                                                      ;
  11. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-9-21 20:56:32 | 显示全部楼层
灯火阑珊201 发表于 2022-9-21 20:54
但是这么改的话我如果输入\就会直接退出循环,但是我加while循环的想法就是如果输入的不是字母就继续输入

while(x) 改成 a的判断不就好了 !((a<=90&&a>=65) or (a<=122&&a>=97))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-21 21:12:19 | 显示全部楼层
  1. #include<stdio.h>

  2. int main(void)
  3. {
  4.         char c                                             ;
  5.         for(;;) {
  6.                 printf("请输入一个大写或小写字母: ")       ;
  7.                 fflush(stdin)                              ;  // 每次在输入前,先清空键盘缓冲区
  8.                 c = getchar()                              ;
  9.                 if((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
  10.                         if(c >= 'A' && c <= 'Z') c += 32   ;
  11.                         else c -= 32                       ;
  12.                         break                              ;
  13.                 } else {
  14.                         printf("你输入的不是一个字母!\n") ;
  15.                 }
  16.        }
  17.        putchar(c)                                          ;
  18. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-21 21:15:48 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-21 21:16:30 | 显示全部楼层
ba21 发表于 2022-9-21 20:56
while(x) 改成 a的判断不就好了 !((a=65) or (a=97))

谢谢了!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-21 21:17:59 | 显示全部楼层    本楼为最佳答案   

问题 在这
        char a=getchar();
                getchar(); // 消除最后的 回车换行(\n)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-21 21:53:32 | 显示全部楼层
极端条件导致if和else条件共用了
随便给你找一个大小写转换的代码(来源网络):
  1. #include <iostream>
  2. #include <algorithm>

  3. using namespace std;
  4. string s;
  5. int main() {
  6.     cout<<"请输入一个含大写的字符串:";
  7.     string str;
  8.     cin>>str;
  9.     ///转小写
  10.     transform(str.begin(),str.end(),str.begin(),::tolower);
  11.     cout<<"转化为小写后为:"<<str<<endl;
  12.     transform(str.begin(),str.end(),str.begin(),::toupper);
  13.     cout<<"转化为大写后为:"<<str<<endl;
  14.     return 0;
  15. }
复制代码

回答不易,望设最佳
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-22 17:17:24 | 显示全部楼层
9楼是正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-22 17:18:56 | 显示全部楼层
ba21 发表于 2022-9-21 21:17
问题 在这
        char a=getchar();
                getchar(); // 消除最后的 回车换行(\n)

有没有直接清空输入流的函数? 这个getchar()的问题很烦~~~~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 03:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表