gpt4 book ai didi

将多个数组复制到一个数组中

转载 作者:太空宇宙 更新时间:2023-11-04 08:18:58 24 4
gpt4 key购买 nike

我目前正在尝试制作我的程序,以便它的文件名是人名+他们的出生日期。我遇到的问题是只将名称复制到数组中,因为我目前有一个循环,它循环了 15 次。我不确定我如何能够限制程序只循环用户输入的次数,或者当程序到达数组中用户输入字符的末尾时停止程序。

#include <stdio.h>
#include <conio.h>
#include <string.h>

int main()
{
char firstname[16], lastname[15], filename[23];
int dob, i;

printf("Please enter the first name of the player:");
fgets(firstname, 15, stdin);
printf("Please enter the date of birth of the player(ddmmyy): ");
scanf("%6d", &dob);
for(i = 0; i < 15; i++)
{
strncpy(filename[i], firstname[i], 15);
if(lastname[i] == '\0');
{
break;
}
}
for(i = 0; i < 6; i++)
{
strncpy(filename[i+14], dob, 6);
if(dob[i] == '\0');
{
break;
}
}
printf("%s", filename);
}

最佳答案

这是您的代码的一个稍微简单的版本:

#include <stdio.h>
#include <conio.h>
#include <string.h>

int main()
{
char firstname[16], lastname[15], filename[23];
int dob, i;
char *ptr;

printf("Please enter the first name of the player:");
fgets(firstname, sizeof(firstname), stdin);
printf("Please enter the date of birth of the player(ddmmyy): ");
scanf("%6d", &dob);

ptr = firstname;
while( *ptr != '\n' ) ++ptr;
*ptr = '\0';

sprintf(filename, "%s%06d", firstname, dob);

printf("%s", filename);
}

注意:sprintf() 非常强大,可以在复制firstname 的同时为您格式化dob。 (注意:sprintf() 很可能会导致缓冲区溢出,如果你不是特别小心的话。Visual studio 有一个更安全的版本 sprintf_s())

作为替代方案,如果您不想调用任何函数而宁愿手动复制字符串,您可以执行以下操作:

int dob, i, n;
// ...

i = 0;
while( firstname[i] != '\n' && firstname[i] != '\0' )
{
filename[i] = firstname[i];
++i;
}

for( n=100000; n>=1; n /= 10 )
{
int digit = (dob / n) % 10;
filename[i] = (char)('0' + digit);
++i;
}

if( i >= sizeof(filename) )
return -1;
filename[i] = '\0';

关于将多个数组复制到一个数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34160295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com