0

我正在研究 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/ $ 
4

1 回答 1

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 循环的每次迭代中跳过一个字母。要修复它,您需要删除i++for 循环内的那个,以便只有 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]));
}
于 2017-03-31T21:10:39.587 回答