我正在研究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/ $
答案 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]));
}