C语言判断字符串是不是都是字母

#include<stdio.h>
struct library
{
char writer[20];
}book[30],tem;
main()
{
int i,n;
int ret=0;

a:
printf("请输入作者名:");
scanf("%s",book[0].writer);
for(i=0;i<20;i++)
{
if(book[0].writer[i]>'z'&&book[0].writer[i]<'a')
ret++;
else n++;
}
b:
if(ret==0)
{printf("%s",book[0].writer);}
else
{ret=0; goto a;}
}
请问怎么就出错了呢,我想它只要输入的不全是字母就要求重新输入

C语言中可以用系统提供的函数islower()和isupper()来判断一个字符是否是有效的字母。

通过遍历字符串中的每个字符,用以上函数进行检验,就可以达到检验字符串是否全部是字母了。

函数说明:

#include <ctype.h>  //函数所需头文件

int islower(int c);   //checks for a lower-case character. 不是返回0,是,则返回非0值

int isupper(int c); //checks for an uppercase letter.不是返回0,是,则返回非0值

参考代码:

#include <stdio.h>
#include <ctype.h>
int isalpha_string( char *s )
{
    int i;
    for( i=0;s[i];i++ )
    {
        if ( !islower(s[i]) && !isupper(s[i]) ) //不是小写,也不是大写,则返回不是字母0
            return 0;
    }
    return 1; //全是字母返回是1
}
void main()
{
    char str[100];
    scanf("%s", str );
    if ( isalpha_string(str) )
    {
        printf("yes!\n");
    }
    else
    {
        printf("no!\n");
    }
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-01-07
1)不知道变量n有何作用;
2)大于'z'而且小于'a'的字符,你认为存在吗?
3)你所设的标记b不知道有什么用
4)一点建议:不要使用goto语句,尽量将goto语句换成循环语句,在一定条件下你可以使用break退出循环
5)一点建议:你的程序中只有一个main函数,程序比较小时还可以接受,一旦设计一个比较大的程序,你将不知道如何修改。
下面是我写的一段代码,和你的大同小异(稍微改进了一下)

#include<stdio.h>
#include <string.h>

struct library
{
char writer[20];
}book[30],tem;

bool isMyType(char str[],int strLength)
{
int i;
for(i=0;i<strLength;i++)
if(str[i]>'z' || str[i]<'a')
return false;
return true;
}//判断一个字符串是不是全由小写字母构成,如果是则返回true,否则返回false;

void main()
{
printf("请输入作者名:");
scanf("%s",book[0].writer);

while(!isMyType(book[0].writer,strlen(book[0].writer)))
{
printf("请输入作者名:");
scanf("%s",book[0].writer);
}

printf("您输入的字符串:%s,全由小写字母构成!\n",book[0].writer);
}本回答被网友采纳
第2个回答  2010-01-07
if(book[0].writer[i]>'z'&&book[0].writer[i]<'a')
这一句的逻辑有问题, 要求一个字符即大于z又小于a,你觉的可能吗?a是小于z的.
第3个回答  2010-01-07
if(book[0].writer[i]>'z'&&book[0].writer[i]>'a' || book[0].writer[i]>'Z'&&book[0].writer[i]>'A')
相似回答