C 检测大写字母时出错
昨天我们参加了一门C语言课程的考试,问题是这样的:C 检测大写字母时出错,c,C,昨天我们参加了一门C语言课程的考试,问题是这样的: 编写一个名为toLowercase的函数,该函数将字符作为参数,并将大写字母返回到小写字母。如果字符不是大写字母,函数应返回它不变 编写一个程序,从用户处获取任意多个字符(直到用户输入“!”),然后以小写形式输出第一个和最后一个输入的大写字母 a。如果用户只输入一个大写字母,程序应以小写形式输出该大写字母两次 b。我们可以假设用户总是输入至少一个大写字母 示例输入和期望输出 lskdjfsffkaffkafkfafkfafkfgrorelkkj
lskdjfsffkaffkafkfafkfafkfgrorelkkjfks代码>==>sk
Mdsfisjf98948*3jkfhf9059353953,^+%^+%代码>==>mh
sjfhsfR'^^“jfi2jpfj99ejfsdfs
==>rr
这是我的密码:
#include <stdlib.h>
#include <stdio.h>
char toLower(char n){
char m=' ';
if(n>='A'&&n<='Z'){
m=n-'A'+'a';
return m;
}
else
return n;
}
int main(){
int i=0;
char ch,chmod,chFirst=' ',chLast=' ';
scanf("%c",&ch);
while(ch!='!'){
chmod=toLower(ch);
if(chmod!=ch){
chLast=chmod;
i++;
}
if(i==1)
chFirst=chmod;
scanf("%c",&ch);
}
if(i==1)
chFirst=chLast;
printf("%c%c",chFirst,chLast);
return 0;
}
#包括
#包括
char-toLower(char-n){
字符m='';
if(n>='A'&&n仅当chFirst为stil==''时设置chFirst,并在第一个if中执行。通过这种方式,您可以摆脱变量i…,正如@ace所指出的,您的逻辑中有一个小问题。解决方法是使用以下代码:
if(i==1)
chFirst=chmod;
在前面的if
语句中,如下所示:
if(chmod!=ch){
chLast=chmod;
i++;
if(i==1)
chFirst=chmod;
}
有问题的逻辑如下:
while(ch!='!'){
chmod=toLower(ch);
if(chmod!=ch){
chLast=chmod;
i++;
}
if(i==1)
chFirst=chmod;
scanf("%c",&ch);
}
如果第一个字母是大写,则考虑大小写。然后,chLast
将被更改,i
将递增,然后chFirst
将被更改
现在,如果第二个字母不是大写,i
将不会递增,并且仍然是1
。因此chFirst
将再次更改,这不是您想要的
更好的逻辑如下:
while(ch!='!'){
chmod=toLower(ch);
if(chmod!=ch){
chLast=chmod;
if(i==0) {
chFirst=chmod;
i=1;
}
}
scanf("%c",&ch);
}
在这个改进的逻辑中,有效地使用了i
作为布尔变量,0
表示chFirst
未设置,1
表示chFirst
已设置。请注意,if(i==1)的最终检查chFirst=chLast;
不是必需的。请将标题更改为有意义的“我的代码有什么问题?”不会帮助任何其他有相同问题的用户,因为它没有描述问题。毫无疑问,主题需要更改,但这个问题不值得否定和接近投票。它写得很好,OP已经尝试解决问题,给出了他的示例代码等+1来抵消否定投票。不,这不是casE测试第二种情况,你就会知道你的答案是错误的。@ace:谢谢你指出,我没有真正检查第二种情况我不明白scanf(“%c”,&ch)
和scanf(“%c”,&ch)之间的区别
?@Ahmetİnal:这是对代码的改进,但不能解决问题。谢谢,尽管检查chFirst==''
(初始值)更符合逻辑