c - 以特定方式打印名称
问题描述
我必须编写一个代码,打印出第一个姓氏,如下所示:Smith, A.
到目前为止,我已经尝试了各种技术,并且不小心创建了一个我相信的无限“for”循环,尽管我不是 100% 确定我是如何做到的。这是专门针对 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)~(two symbols), 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;
}
这具有不受任何缓冲区溢出问题的明显优势 - 因为没有缓冲区。
推荐阅读
- css - 获取两个 i 标签之间信息的 CSS 选择器或 XPath?
- javascript - 是否可以生成似乎由 js 文件生成的 cookie - 抓取问题
- windows - Windows 10 服务启动错误2(系统找不到指定路径)
- python - 是否可以在熊猫数据框中进行全文搜索
- php - 在 PHP 中更改引用计数时触发事件
- java - 在旧 EJB 配置位于 ejb-jar.xml 的项目中使用 ejb 注释和 CDI
- ajax - Bootstrap 数据表分页和排序
- c# - 在我的 asp.net 核心 MVC Web 应用程序中,我如何使 recaptcha 成为必填字段
- flutter - 关于使用 SingleChildScrollView 换行列的问题
- java - 使用 TextField 在上下文菜单中显示重复的菜单项。JavaFX。JDK 14