#include
#include
int main(void) //本程序按照“姓,名字首字母.”的格式将用户键入的英文名字输出
{
char first_name;
char ch_1;//名字
char ch_2;//姓氏
printf("Enter a first and last name:");
while((first_name=getchar())==' ')
;//获得名的首字母
while ((ch_1=getchar())!=toupper(ch_1))
;//获得名字
while ((ch_2 = getchar()) != '\n')//输出名字(排除空格)
{
if (ch_2 != ' ')
putchar(ch_2);
}
printf(", %c.\n", first_name);//输出结果
return 0;
}
初学,这是自己编的一段代码。因为只学到第六章循环,和第七章基本类型。所以只用已学过的东西来编。
第一个奇怪的是,第二个循环 while ((ch_1=getchar())!=toupper(ch_1));//获得名字
本意是想跳过所有小写字母,直到遇到大写字母停止的。但是经过运行,只要在名字和姓中间加空格,无论首字母是否小写,程序都能识别姓和名分别是哪个,并按题目要求正确显示。
第二个奇怪的地方,昨天也是这样,但怎么运行都不对,输出时,姓的大写首字母会丢掉,例如输入"Thierry Henry",输出则是"enry,T."我想也对。因为按书中所说,按照惯用法while(ch=getchar()==' ')是跳过无限个空格,但是程序终止时,ch会包含遇到的第一个非空格字符。由此推理while(ch_1=getchar()!=toupper(ch_1))的作用应该是跳过所有非大写字母,终止时,ch_1将包含第一个大写。所以后面输出ch_2的时候就丢掉了这个大写。
然而今天同样运行这个程序的时候,完全没毛病。