我试图在C中编写一个程序,提示用户输入名称,然后输出其首字母

时间:2015-07-12 15:26:40

标签: c loops

以下是我先写的内容​​。它非常适合字符串之间的一个空格。

int main(void)
{
    string name = GetString();
    printf("%c",toupper(name[0]));

    for (int i = 0; i < strlen(name); i++)
    {
        if (name[i] == ' ')
        {
            i++;
            printf("%c", toupper(name[i]));
        }
    }
    printf("\n");
}

但是,由于它只检测到一个空格,因此对于两个字符串之间有多个空格的用户输入不起作用。所以,我继续创建了一个do while循环,如下所示:

int main(void)
{
    string name = GetString();
    printf("%c",toupper(name[0]));

    for (int i = 0; i < strlen(name); i++)
    {
        do
        {
            if (name[i] == ' ')
            {
               i++;
               printf("%c", toupper(name[i]));
            }
        }
        while (name[i+1] != ' ');
    }
    printf("\n");
}

虽然我期待循环为我做,现在,我的终端只提示几乎无限数量的用户输入名称和打印绝对没有。我似乎无法检测到错误。这只是我的第一周编程,请帮忙!

2 个答案:

答案 0 :(得分:1)

您可以使用检查next是否为空格来转义下一个空格:

if (name[i] == ' ' && name[i+1] != ' ')

在你的第一个节目中。

for (int i = 0; i < strlen(name); i++)
    {
        if (name[i] == ' ' && name[i+1] != ' ')
        {
            printf("%c", toupper(name[i+1]));
        }
    }

答案 1 :(得分:0)

程序的主要逻辑可以看作以下方式。我以字符数组为例,因为我不知道如何定义名称TypeError

string

程序输出

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

int main( void )
{
//  string name = GetString();
    char name[] = "yashmin sainju";

    char *p = name;

    while ( isblank( ( unsigned char )*p ) ) ++p;
    if ( *p )  printf( "%c.", toupper( ( unsigned char )*p ) );

    while ( *p && !isblank( ( unsigned char )*p ) ) ++p;
    while ( isblank( ( unsigned char )*p ) ) ++p;
    if ( *p )  printf( " %c.\n", toupper( ( unsigned char )*p ) );
}  

如果编译器不支持函数Y. S. ,则可以将其替换为表达式

isblank