C代码不起作用,但没有显示错误

时间:2014-05-02 17:15:42

标签: c string logic ctype

当我遇到这个障碍时,我正在准备我的计算机科学实践考试。 以下C代码用于大写从用户获取的字符串中的所有单词。

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

int main()
{
    char a[20];
    int i;
    printf("Enter a string: ");
    scanf("%[^\n]s",a);

    if(islower(a[0])!=0)
    {
        a[0]=toupper(a[0]);
    }

    for(i=0;i<strlen(a);i++)
        if(a[i]==' ' && isalpha(a[i+1]!=0))
            a[i+1]=toupper(a[i+1]);

    printf("%s\n",a);
    return 0;
}

但上面的代码不执行任务。它接受输入,但给出相同的输出(输入的字符串,按原样)。此外,没有显示错误或警告。我正在使用gcc在Ubuntu 14.04中编码。我似乎不明白为什么代码不起作用。

3 个答案:

答案 0 :(得分:2)

你应该阻止:

if(islower(a[0])==0)
{
   a[0]=toupper(a[0]);
}

检查它是否不等于零而不是它?

答案 1 :(得分:1)

您的错误是isalpha(a[i+1]!=0),因为您应该只检查isalpha(a[i+1])。对于输入字符串中的所有字符,表达式a[i+1]!=0的返回值为1,除了最后一个字符。 isalpha(1)的返回值为0,因此if条件下的语句将对最后一个字符执行 ,而该字符前面有空格字符。

话虽如此,这是一个更好的方式来实现整个事情:

for (i=1; a[i]!=0; i++)
    if (a[i-1]==' ' && isalpha(a[i]))
        a[i] = toupper(a[i]);

答案 2 :(得分:0)

检查第一个)在isalpha(a [i + 1]!= 0)),它放错地方。

for(i=0;i<strlen(a);i++)
    if(a[i]==' ' && isalpha(a[i+1])!=0)
        a[i+1]=toupper(a[i+1]);

也应该是第一个

if(islower(a[0]){}