打印输出时出现cs50首字母错误

时间:2017-03-30 23:19:49

标签: c cs50 edx

我正在研究Cs50 pset2缩写。当我运行程序时,它打印出名字的前2个字母和姓氏的第2,第4和第6个字母。我想知道我的增量是否错误?谢谢

这是我的代码..

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

int main(void)
{
    // variables
    string urName;
    char init;
    int i;

    // get user input
    printf("Please state your full name:\n");

    do 
    {
        urName = get_string();
    }
    while (urName == NULL);

    printf("%c", toupper(urName[0]));

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

    return 0;
}

这是示例输出..

Please state your full name:
den nguyen
DE GYN~/workspace/pset2/ $ 

1 个答案:

答案 0 :(得分:0)

就像DYZ提到的那样,你在for循环中的 2 个实例中增加你的计数器:

for (i = 0, init = strlen(urName); i < init; i++) // "i" is incremented here
{
    if ((urName[i]) != '\0')
    { 
        printf("%c", toupper(urName[i+1]));
        i++; // "i" is also incremented here
    }
}

通过递增 i 两次,编译器会在for循环的每次迭代中跳过一个字母。要修复它,您需要删除for循环中的i++,以便只有for循环条件中的计数器增量才能正常工作:

for (i = 0, init = strlen(urName); i < init; i++) // "i" only needs to be incremented here
{
    if ((urName[i]) != '\0')
        printf("%c", toupper(urName[i+1]));
}