为什么循环在它结束之前停止?

时间:2017-06-24 19:03:17

标签: c cs50

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

int main(void)
{
    string name = get_string();
    for(int i=0;i<strlen(name);i++ )
    {
         //printf("%c\n",name[i]);
         if(name[i]=='\0' && name[i+1]!='\0') //try to print the next char of space
        {   
            if(name[i+1]<='z' && name[i+1]>='a')
            {
                printf("%c",name[i+1]);
            }
            if(name[i+1]<='Z' && name[i+1]>'A')
            {
                printf("%c",name[i+1]);
            }
        }
        else;
    }
}

get_string()是将用户输入为字符串。

运行之后,它只打印我输入的第一个字符,这意味着循环停止。

我的条件线有什么问题吗?

for(int i=0;i<strlen(name);i++ )更改为for(int i=0;i<strlen(name)-1;i++ )后,它会给我一个分段错误。我会更多地研究它。

1 个答案:

答案 0 :(得分:0)

现在我知道为什么了。

我认为'\0'等于' ',它们都是字符串和空格的结尾,这是非常错误的。

所有这些都是因为我的英语不好。我从一开始就认识错了。

愚蠢的问题。但我不想删除它,因为像我这样的人可以使用它。

这是我的最终答案。

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

void caps(char x);

int main(void)
{
    string name = get_string();
if (name!=NULL){
    for(int i=0;i<strlen(name);i++)
    {
       //  printf("%c\n",name[i]);
        if(i==0&&name[0]!=0)
        {
            caps(name[0]);
        }
        if(name[i]==' '&& name[i+1]!=' ') //try to print the next character
        {  
            caps(name[i+1]);
        }
    }
  }
}

void caps(char x)
{
    if(x<='z' && x>='a')
        {
            printf("%c",x-('a'-'A'));
        }
    if(x>='A' && x<='Z')
        {
            printf("%c",x);
        }

}