// praise1.cpp : 定义控制台应用程序的入口点。
//
/* praise1.c -- 使用不同类别的字符串 */
/*
时间:2018年06月09日 22:21:56
代码:程序清单4.2_praise1.c程序_《C Primer Plus》P62
目的:scanf() 只读取了空格之前的英文单词,而非整个语句
*/
#include "stdafx.h"
#define PRAISE "What a super marvelous name!"
int _tmain(int argc, _TCHAR* argv[])
{
char name[40];
printf("What's your name?\n");
scanf("%s", name);
printf("Hello, %s. %s\n", name, PRAISE);
getchar(); // 一般情况下有一个 getchar(),就可以看到输出结果了
getchar(); // 有 scanf() 语句时 需加一个 getchar();
getchar(); // 这里加了八句 getchar();才可以看到最终的输出结果
getchar(); // 是因为 在输入语句时输入了: Hilary Bubbles
getchar(); // Hilary 之后连空格在内共有 8 个 字符
getchar(); // 至于"所以然" 我并未明白,只是知道要这样才解决显示结果
getchar(); // 我想应该还有更好的解决办法,不然后面一百字符时 咋办
getchar(); // 待查中......
getchar();
getchar();
return 0;
}
/*
在VS2010中运行结果:
--------------------------------------------
What's your name?
Hilary Bubbles
Hello, Hilary. What a super marvelous name!
--------------------------------------------
google 翻译如下:
你叫什么名字?
希拉里 泡泡
你好,希拉里。 多么美妙的名字!
praise(称赞)/marvelous(不可思议的)
--------------------------------------------
总结:
1>.scanf(); 输入语句后,电脑只读取了第一个单词,
空格之后的所有字符均没被输出到屏幕上;
2>.但要最终显示结果,要加入相应个数的 getchar(),
连空格在内之后的有几个字符就要加几个 getchar();
3>.为什么要加那么多的 getchar();不明其理,相信
一定要更好解决办法,待查中......
--------------------------------------------
*/
原文地址:http://blog.51cto.com/13555061/2126828