所以这是我的代码
#include <stdio.h>
main()
{
char name[62],first[31],last[31];
int i, j;
printf("What is your first name? ");
scanf("%[^\n]", first);
fflush(stdin);
printf("What is your last name? ");
scanf("%[^\n]", last);
fflush(stdin);
for (i=0; first[i]!='\0' ; i++)
name[i]=first[i];
name[i]=' '; // for loop ends before null so insert space after last char
i++;
for (j=0; last[j]!='\0'; j++)
name[i+j]=last[i+j];
name[i+j]='\0'; // ends before null so input null
printf("%s", name);
}
所以我编译它,我可以从名称输出名字,但它停在那里。我检查了解决方案,正确的方法是使用:
for (j=0; last[j]!='\0'; j++, i++)
name[i]=last[j];
name[i]='\0'; // ends before null so input null
printf("%s", name);
这样做是有意义的,但我想知道我的原始方法是否可行。这是一个模仿strcpy和strcat的练习,所以我知道这两种方式更快。</ p>
答案 0 :(得分:4)
这一个
for (j=0; last[j]!='\0'; j++)
name[i+j]=last[i+j];
应该阅读
for (j=0; last[j]!='\0'; j++)
name[i+j]=last[j];
因为i
是您想要开始写姓氏的name
数组的偏移量,j
计算姓氏的字符。
也就是说,您的代码还存在其他一些主要问题(尝试输入超过31个字符的名称部分,您会看到......)