求纠错!为啥会打印两次
代码如下:#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;
}
自己写的把字母大小写转换的程序,但是比如输入\,会打印两次请输入一个大写或小写字母!!!!!
不知道为啥,求助
else
{
printf("请输入一个大写或小写字母!!!!!\n");
x=0;
} ba21 发表于 2022-9-21 20:48
else
{
printf("请输入一个大写或小写字母!!!!!\n");
但是这么改的话我如果输入\就会直接退出循环,但是我加while循环的想法就是如果输入的不是字母就继续输入 #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") ;
} 灯火阑珊201 发表于 2022-9-21 20:54
但是这么改的话我如果输入\就会直接退出循环,但是我加while循环的想法就是如果输入的不是字母就继续输入
while(x) 改成 a的判断不就好了 !((a<=90&&a>=65) or (a<=122&&a>=97)) #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) ;
} jackz007 发表于 2022-9-21 20:56
感谢! ba21 发表于 2022-9-21 20:56
while(x) 改成 a的判断不就好了 !((a=65) or (a=97))
谢谢了!! 灯火阑珊201 发表于 2022-9-21 21:16
谢谢了!!
问题 在这
char a=getchar();
getchar(); // 消除最后的 回车换行(\n) 极端条件导致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;
}
回答不易,望设最佳 9楼是正解 ba21 发表于 2022-9-21 21:17
问题 在这
char a=getchar();
getchar(); // 消除最后的 回车换行(\n)
有没有直接清空输入流的函数? 这个getchar()的问题很烦~~~~~~~
页:
[1]