编写一个程序,根据用户输入英文名和姓先显示姓氏,其后跟一个逗号,然后显示名的首字母,最后加一个点:
Enter a first and last name:Llovd Fosdick
Fosdick,L.
用户的输入中可能包含空格。
答案:
#include <stdio.h>
int main(void)
{
char first_initial, ch;
printf("Enter a first and last name: ");
scanf(" %c", &first_initial);
while (getchar() != ' ');
while ((ch = getchar()) != '\n')
if (ch != ' ')
putchar(ch);
printf(", %c.\n", first_initial);
return 0;
}
不明白每一行都是为什么,可以帮我在每一行后面讲解一下吗?
第1个回答 推荐于2018-04-16
//先看这这代码, 这段代码的可读性不高...... 注释等会.
#include <stdio.h>
int main(void)
{
char first_initial, ch; //这代码写得不好, 打眼一看以为是错的.....
printf("Enter a first and last name: ");
scanf(" %c", &first_initial); //这个是为了保存名字的第一个字符, 这样剩下的就只剩下名的后面部分和
while (getchar() != ' '); //这样它把名字给输入完了, 因为姓和名中间有空格
while ((ch = getchar()) != '\n') //输入姓.
if (ch != ' ') //这句感觉没啥用, 因为姓不可能会有空格在里面.
putchar(ch);
printf(", %c.\n", first_initial); //然后把刚刚保存到的名字的首字输出.
return 0;
// 我咋感觉这代码错了.....因为一个getchar后面紧跟一个putchar, 就相当于是, 你在控制台里输入一个1, 结果出来了俩1.
}本回答被提问者和网友采纳
#include <stdio.h>
int main(void)
{
char first_initial, ch; //这代码写得不好, 打眼一看以为是错的.....
printf("Enter a first and last name: ");
scanf(" %c", &first_initial); //这个是为了保存名字的第一个字符, 这样剩下的就只剩下名的后面部分和
while (getchar() != ' '); //这样它把名字给输入完了, 因为姓和名中间有空格
while ((ch = getchar()) != '\n') //输入姓.
if (ch != ' ') //这句感觉没啥用, 因为姓不可能会有空格在里面.
putchar(ch);
printf(", %c.\n", first_initial); //然后把刚刚保存到的名字的首字输出.
return 0;
// 我咋感觉这代码错了.....因为一个getchar后面紧跟一个putchar, 就相当于是, 你在控制台里输入一个1, 结果出来了俩1.
}本回答被提问者和网友采纳
第2个回答 2018-04-16
//用户输入中可能包含空格(名子之前,名与姓之间,姓之后)
//非数组,非goto跳法
#include <stdio.h>
void main()
{
char ch,bh;
int i=0;
ch=getchar();
bh=ch; //将首字符(名字开头读入bh)。
while(ch!='\n') //不把getchar写入第一个while,需要用到第二个while里的'\n'来跳出。
{
ch=getchar();
if(ch==' ') //检测到姓氏之前的空格的位置后开始输出阶段
while(1)
{
ch=getchar();
if(ch!=' ') //检当前字符非空格时在输出; 防止输出首位是空格,不写也行。
if(ch!='\n') //如果第一个while里用的getchar这里读
printf("%c",ch); //入一个'\n' 那第一个while就跳不出去了。
else
break; //带着'\n'跳出第二个while。也就是为何第一个while没
} //和getchar写入在一起。
}
printf(",%c.\n",bh);
}
//非数组,非goto跳法
#include <stdio.h>
void main()
{
char ch,bh;
int i=0;
ch=getchar();
bh=ch; //将首字符(名字开头读入bh)。
while(ch!='\n') //不把getchar写入第一个while,需要用到第二个while里的'\n'来跳出。
{
ch=getchar();
if(ch==' ') //检测到姓氏之前的空格的位置后开始输出阶段
while(1)
{
ch=getchar();
if(ch!=' ') //检当前字符非空格时在输出; 防止输出首位是空格,不写也行。
if(ch!='\n') //如果第一个while里用的getchar这里读
printf("%c",ch); //入一个'\n' 那第一个while就跳不出去了。
else
break; //带着'\n'跳出第二个while。也就是为何第一个while没
} //和getchar写入在一起。
}
printf(",%c.\n",bh);
}