鱼C论坛

 找回密码
 立即注册
查看: 2086|回复: 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 | 显示全部楼层
#include<stdio.h>

int main(void)
{
        char c                                                                            ;
        printf("请输入一个句子 :")                                                       ;
        for(; (c = getchar()) != '\n' ;) {
                c = (c >= 'A' && c <= 'Z') ? c + 32 : (c >= 'a' && c <= 'z') ? c - 32 : c ;
                putchar(c)                                                                ;
        }
        printf("\n")                                                                      ;
}
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层
#include<stdio.h>

int main(void)
{
        char c                                             ;
        for(;;) { 
                printf("请输入一个大写或小写字母: ")       ;
                fflush(stdin)                              ;  // 每次在输入前,先清空键盘缓冲区
                c = getchar()                              ;
                if((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
                        if(c >= 'A' && c <= 'Z') c += 32   ;
                        else c -= 32                       ;
                        break                              ;
                } else {
                        printf("你输入的不是一个字母!\n") ;
                }
       }
       putchar(c)                                          ;
}
想知道小甲鱼最近在做啥?请访问 -> 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条件共用了
随便给你找一个大小写转换的代码(来源网络):
#include <iostream>
#include <algorithm>
 
using namespace std;
string s;
int main() {
    cout<<"请输入一个含大写的字符串:";
    string str;
    cin>>str;
    ///转小写
    transform(str.begin(),str.end(),str.begin(),::tolower);
    cout<<"转化为小写后为:"<<str<<endl;
    transform(str.begin(),str.end(),str.begin(),::toupper);
    cout<<"转化为大写后为:"<<str<<endl;
    return 0;
}
回答不易,望设最佳
想知道小甲鱼最近在做啥?请访问 -> 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-12-28 04:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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