gpt4 book ai didi

c - 以特定方式打印出姓名

转载 作者:行者123 更新时间:2023-11-30 19:27:45 25 4
gpt4 key购买 nike

我必须编写一个代码来打印名字,如下所示:史密斯,A.

到目前为止,我已经尝试了各种技术,并且意外地创建了一个无限的“for”循环,尽管我不确定我是如何做到的。这是专门针对 C 的,我对这门语言相对较新,尽管已经阅读了教科书,但显然对字符在数组内如何工作没有很好的理解。这可能是一个简单的问题,我想太多了。这是我到目前为止所写的内容,排除了代码中不必要的方面(即定义)

更新的代码

int main(void)
{
char name, letter;
char fname[MAX], lname[MAX];
int countf, countl, i, j;

printf("Enter a first and last name: ");
countf = 0;
countl = 0;
while ((name = getchar()) != ' ') {
fname[countf++] = name;
}

while ((name = getchar()) != '\n') {
lname[countl++] = name;
}

for(i=0;i < sizeof(lname);i++) {
putchar(lname[i]);
}
printf(", ");
putchar(fname[0]);
printf(".");

return 0;
}

我仍然有一些随机和不必要的变量。当前输出是 Smith(symbol)t(symbol)~(两个符号), A。”我不知道如何消除这些故障

最佳答案

您必须在有效数据的末尾停止输出姓氏,而不是在数组的末尾:

for( i = 0; i < countl; i++ )
// ^^^^^^

这修复了你的代码,但你的问题有点过于复杂化了。当您只需要存储第一个字母时,您没有必要存储输入。然后,您可以简单地丢弃名字的其余部分,并在最终输出存储的第一个字母之前直接输出姓氏 - 因此:

int main( void )
{
printf( "Enter a first and last name: " );

// Keep first letter to output last.
char letter = getchar() ;

// Discard the rest of the first name
while( getchar() != ' ' )
{
// Do nothing until SPACE
}

// Output the last name
int namech = 0 ;
while( (namech = getchar()) != '\n' )
{
putchar( namech ) ;
}
printf( ", " );

// Output the first letter
putchar( letter ) ;
printf( "." );

return 0;
}

这具有明显的优势,可以免受任何缓冲区溢出问题 - 因为没有缓冲区。

关于c - 以特定方式打印出姓名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55443577/

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