灯火阑珊201 发表于 2022-9-21 20:37:57

求纠错!为啥会打印两次

代码如下:
#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;
}

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



ba21 发表于 2022-9-21 20:48:14

else
      {
                printf("请输入一个大写或小写字母!!!!!\n");
x=0;
      }

灯火阑珊201 发表于 2022-9-21 20:54:00

ba21 发表于 2022-9-21 20:48
else
      {
                printf("请输入一个大写或小写字母!!!!!\n");


但是这么改的话我如果输入\就会直接退出循环,但是我加while循环的想法就是如果输入的不是字母就继续输入

jackz007 发表于 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")                                                                      ;
}

ba21 发表于 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))

jackz007 发表于 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)                                          ;
}

灯火阑珊201 发表于 2022-9-21 21:15:48

jackz007 发表于 2022-9-21 20:56


感谢!

灯火阑珊201 发表于 2022-9-21 21:16:30

ba21 发表于 2022-9-21 20:56
while(x) 改成 a的判断不就好了 !((a=65) or (a=97))

谢谢了!!

ba21 发表于 2022-9-21 21:17:59

灯火阑珊201 发表于 2022-9-21 21:16
谢谢了!!

问题 在这
      char a=getchar();
                getchar(); // 消除最后的 回车换行(\n)

高山 发表于 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;
}
回答不易,望设最佳

两手空空儿 发表于 2022-9-22 17:17:24

9楼是正解

两手空空儿 发表于 2022-9-22 17:18:56

ba21 发表于 2022-9-21 21:17
问题 在这
      char a=getchar();
                getchar(); // 消除最后的 回车换行(\n)

有没有直接清空输入流的函数? 这个getchar()的问题很烦~~~~~~~
页: [1]
查看完整版本: 求纠错!为啥会打印两次