如何在数组中的两个单词之间添加空格,我从用户的第一个名字中收到两个单词,他的姓氏是我需要它将两个数组存储在一个数组之间的空格
这是我的代码
#include <stdio.h>
int main()
{
char first_name[15], last_name[15] ,full_name[32];
int i=0,i2,first_name_length,last_name_length;
printf("enter your first name\n");
first_name_length = scanf("%s",first_name);
printf("enter your last name\n");
last_name_length = scanf("%s",last_name);
for(i2 = 0;i2 < first_name_length;i2++){
full_name[i] = first_name[i2];
i++;
}
full_name[i++]=' ';
for(i2 = 0;i2 < last_name_length;i2++){
full_name[i] = last_name[i2];
i++;
}
printf("%s",full_name);
return 0;
}
在scanf中输入“name”值时的输出:
n n
应该是:
name name
编辑:
#include <stdio.h>
int main()
{
char first_name[15], last_name[15] ,full_name[32];
int i=0,i2;
printf("enter your first name\n");
scanf("%14s",first_name);
printf("enter your last name\n");
scanf("%14s",last_name);
for(i2 = 0;first_name[i2];i2++){
full_name[i] = first_name[i2];
i++;
}
full_name[i++]=' ';
for(i2 = 0;last_name[i2];i2++){
full_name[i] = last_name[i2];
i++;
}
printf("%s",full_name);
return 0;
}
输入第一个scanf中的“tom”值和第二个scanf中的“fox”值时的输出:
tom fox↓@
应该是:
tom fox
答案 0 :(得分:4)
scanf()
的返回值是成功扫描的字段数,而不是某些字符串的长度。
使用:
if (1 != scanf("%14s",first_name)) Handle_EOF_orNoInput();
first_name_length = strlen(first_name);`
last_name
[编辑]
由于OP希望不引入新功能(例如偶数strlen()
),因此请使用"%n
来查找长度。 "%n
记录解析位置。
if (1 != scanf("%14s%n",first_name, &first_name_length)) Handle_EOF_orNoInput();
或找到困难的长度
if (1 != scanf("%14s",first_name)) Handle_EOF_orNoInput();
for (first_name_length = 0; first_name[first_name_length]; first_name_length++);
[编辑2]
OP的最新版本不会终止字符串。
full_name[i] = '\0'; // add this
printf("%s",full_name);
答案 1 :(得分:1)
在没有sprintf函数且没有指针的情况下重写
#include <stdio.h>
int main()
{
char first_name[15], last_name[15] ,full_name[32];
int src, dest;
printf("enter your first name\n");
scanf("%s",first_name);
printf("enter your last name\n");
scanf("%s",last_name);
dest = 0;
src = 0;
while (first_name[src] != 0) full_name[dest++] = first_name[src++];
full_name[dest++] = ' ';
src = 0;
while (last_name[src] != 0) full_name[dest++] = last_name[src++];
full_name[dest] = 0
printf("%s",full_name);
return 0;
}
答案 2 :(得分:0)
更改
i++;
full_name[i]=' ';
到
full_name[i++]=' ';
您的for循环条件也不太正确:
for(i2 = 0;i2 < first_name_length;i2++){
答案 3 :(得分:0)
函数scanf()不返回读入的字符数。而是返回它读入的成功匹配数(或错误)。在您的运行中,scanf()返回1,因此您只将第一个字符从名字和姓氏复制到全名。
此外,您需要将full_name初始化为全零,或者在复制完姓名后将其终止。
此外,您阅读字符串的方式很危险。你应该限制scanf()可以读入多少个字符,否则它会溢出你的缓冲区并丢弃你的记忆(或让黑客进入等):
if (1 != scanf("%14s", first_name))
; // TODO: handle unexpected input, EOF, error, etc.
甚至更好:
#define STR(x) #x
#define SSTR(x) STR(x)
#define STR_FMT(x) "%" SSTR(x) "s"
#define FIRST_NAME_MAX_LEN 14
...
char first_name[FIRST_NAME_MAX_LEN + 1] = { 0 };
...
if (1 != scanf(STR_FMT(FIRST_NAME_MAX_LEN), first_name))
; // TODO: handle unexpected input, EOF, error, etc.