我的isupper函数总是说它不是上层

时间:2015-04-09 03:37:13

标签: c

我似乎无法弄清楚为什么我的输出只有一倍。

#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编程的新手。如果您有关于调试的任何提示,请告诉我,以便我不会因为我可以自我修正而烦恼任何人。 谢谢!

3 个答案:

答案 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));
}