我似乎无法弄清楚为什么我的输出只有一倍。
#include<stdio.h>
#include<stdlib.h>
int my_isupper(int c);
int my_tolower(int c);
int
main(int argc,char *argv[]){
int c;
printf("Enter alphabet:");
scanf("%d",&c);
if ((c<='A' && c>='Z')||(c<='a' && c>='z')){
printf("Error: Please type a alphabet\n");
exit(EXIT_FAILURE);
}
if (my_isupper(c)==0){
printf("isnotupper");
}
else{
printf("is upper");
}
return 0;
}
int my_isupper(int c){
if(c>='A' && c<='Z'){
return 1;
}
else {
return 0;
}
}
输出总是&#34; Isnotupper&#34;。可能是一个简单的错误。我是c编程的新手。如果您有关于调试的任何提示,请告诉我,以便我不会因为我可以自我修正而烦恼任何人。 谢谢!
答案 0 :(得分:5)
int c;
printf("Enter alphabet:");
scanf("%d",&c);
应该是
char c;
printf("Enter alphabet:");
scanf("%c",&c);
您需要扫描字母而不是整数。根据您的代码,您希望用户输入字母表,如果您输入字母,scanf()
(前一个%d
)将失败。
因此,请务必检查scanf()
返回值。
if(scanf("%c",&c) == 1)
//Do you stuff
else
//Throw an error
答案 1 :(得分:3)
除格式说明符外,您还需要从以下位置调整测试:
((c<='A' && c>='Z')||(c<='a' && c>='z'))
到
((c<'A' || c>'Z') && (c<'a' || c>'z'))
答案 2 :(得分:3)
陈述如:
if ((c<='A' && c>='Z')||(c<='a' && c>='z')){
往往是马车。如果将逻辑放在函数中会更容易。
if ( !is_alphabet(c) ) {
其中:
int is_lower_alphabet(int c)
{
return ( c >= 'a' && c <= 'z');
}
int is_upper_alphabet(int c)
{
return ( c >= 'A' && c <= 'Z');
}
int is_alphabet(int c)
{
return (is_lower_alphabet(c) || is_upper_alhabet(c));
}