幻影换行符

来源:百度知道 编辑:UC知道 时间:2024/06/15 12:26:26
在a first book of ansi c 中有这一个程序

#include <stdio.h>
int main()
{
char fkey, skey;

printf("Type in a character: ");
scanf("%c", &fkey);
printf("The keystroke just accepted is %d", fkey);
printf("\nType in another character: ");
scanf("%c", &skey);
printf("The keystroke just accepted is %d\n", skey);

return 0;
}

这个程序不正确因为有回车键的影响

它下面的解释有一段话:
应当注意每个键都有一个数字代码,包括空格键,回车键,esc和ctrl,这些键在输入数字是一般不会有影响。因为scanf()函数把他们当作随数字数据输入的先后空白符而忽略。<b>这些键也不会影响等待输入第一个用户数据时所请求的单个字符的输入。只有在用户已经输入某些其它数据之后请求一个字符时,与上面程序情况一样,要注意看不见的回车键的影响。</b>
请问夹在<b></b>中的句子应该怎么理解?
我运行了上面那个程序,连续输入esc,屏幕显示
\
\
\
\
\
但是没有数据存入。我输入“e”这个字母后再按esc,还是没有存并且e也没存入。请问什么样的时候空格键,回车键,esc和ctrl对输入有影响?
谢谢

scanf("%c", &fkey);
scanf("%c", &skey);

%c只是获取IO流中的一个字符,输入a[空格][回车],此时a[空格][回车]均保存在IO流中,当fkey取得第一个a后,skey紧接着取第二个[空格]。
你所说的这些特殊键,在%c获取字符时需要特别注意,在%s的时候不受影响。

加一个
void clear(void)
{
char s[20];
gets(s);
}

#include <stdio.h>
int main()
{
char fkey, skey;

printf("Type in a character: ");
clear();
scanf("%c", &fkey);
printf("The keystroke just accepted is %d", fkey);
printf("\nType in another character: ");
clear();
scanf("%c", &skey);
printf("The keystroke just accepted is %d\n", skey);

return 0;
}

你的编译器有问题Q!

我这里的
g++
完全正常@!