c语言编写一个程序,根据用户输入英文名和姓先显示姓氏,其后跟一个逗号,然后显示名的首字母:

编写一个程序,根据用户输入英文名和姓先显示姓氏,其后跟一个逗号,然后显示名的首字母,最后加一个点:
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.

}本回答被提问者和网友采纳
第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);               
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网