输入一行字符串,将每个单词的第一个字母改成大写字母

img

img

img


我打的代码不知道是哪的问题,从结果来看好像是没有循环

*p -=32 的条件应该是 flag==1 并且 *p >='a',而且flag的初始值应该是1,否则第一个单词就没法更改了。
flag=1的条件应该是 *p == ' '

img

代码修改如下:

#include <stdio.h>
int main()
{
    int flag = 1; //这里初始化为1
    char str[80],*p = str;
    printf("Input a line char:");
    gets(str);
    while(*p != '\0')
    {
        if (*p>='a' && flag==1)
        {
            *p -= 32;
            flag = 0;
        }else if (*p == ' ')
        {
            flag = 1;
        }
        p++;
    }
    puts(str);
    return 0;
}

#include<stdio.h>
int main()
{
    char str[200],*p;
    gets(str);
    p=str;
    if(*p>='a'&&*p<='z') *p=*p-32;
    while(*++p!='\0')
    {
        if(*(p-1)==' ')
        {
            if(*p>='a'&&*p<='z') *p-=32;
        }
        else if(*p>='A'&&*p<='Z') *p+=32;
    }
    puts(str);
    return 0;
}