打印输出的 cs50 首字母错误
cs50 initials error with printed output
我正在研究 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]) != '[=10=]')
{
printf("%c", toupper(urName[i+1]));
i++;
}
}
return 0;
}
这里是示例输出..
Please state your full name:
den nguyen
DE GYN~/workspace/pset2/ $
正如 DYZ 提到的,您在 for 循环内的 2 个实例处递增计数器:
for (i = 0, init = strlen(urName); i < init; i++) // "i" is incremented here
{
if ((urName[i]) != '[=10=]')
{
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]) != '[=11=]')
printf("%c", toupper(urName[i+1]));
}
我正在研究 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]) != '[=10=]')
{
printf("%c", toupper(urName[i+1]));
i++;
}
}
return 0;
}
这里是示例输出..
Please state your full name:
den nguyen
DE GYN~/workspace/pset2/ $
正如 DYZ 提到的,您在 for 循环内的 2 个实例处递增计数器:
for (i = 0, init = strlen(urName); i < init; i++) // "i" is incremented here { if ((urName[i]) != '[=10=]') { 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]) != '[=11=]')
printf("%c", toupper(urName[i+1]));
}