我监视变量,发现只有char类型变量才会调用缓存区的'\n'导致结果出错。必须加一个getchar()才能把'\n'吸收,像是char a[20]这样的用scanf给他赋值,也不会读取上一个scanf留下的'\n'。
#include<stdio.h>
void test()
{
int num = 0;
printf("请重新给num赋值:");
scanf("%d", &num);
printf("num的新值为:%d\n", num);
getchar();
char ch = 'a';
printf("请重新给ch赋值: ");
scanf("%c", &ch);
printf("ch的新值为:%c\n", ch);
}
int main()
{
test();
return 0;
}
#include<stdio.h>
void test()
{
int num = 0;
printf("请重新给num赋值:");
scanf("%d", &num);
printf("num的新值为:%d\n", num);
char ch = 'a';
printf("请重新给ch赋值: ");
scanf("%c", &ch);
printf("ch的新值为:%c\n", ch);
}
int main()
{
test();
return 0;
}
#include<stdio.h>
void test()
{
int num = 0;
printf("请重新给num赋值:");
scanf("%d", &num);
printf("num的新值为:%d\n", num);
char ch[20];
printf("请重新给ch赋值: ");
scanf("%s", &ch);
printf("ch的新值为:%s\n", ch);
}
int main()
{
test();
return 0;
}
当输入一个回车符后,如果下一个读取的是字符类型,就必须用getchar()来接收一下这个回车符。
如果下一个读取的是数字类型,则不必再用getchar()接收这个回车符。
通过scanf("%s",ch)来读取字符串时,%s读取字符串也是通过回车符来触发的,并且会在回车符或者空格处结束。
所以,如果读取单个字符前通过回车符输入了数据,就必须在读取单个字符前使用getchar()接收一下回车符。
getchar() 和 scanf("%c", &ch); 会读取任意的字符,包括 '\n'换行字符
如果缓存区中遗留了'\n'就会被getchar() 和 scanf("%c", &ch); 读取。
将char a改成char a[20]则是用 scanf("%s",a); 读取字符串,
用"%s"方式不会读取空格与换行符等空白字符,用"%s"会跳过空格与换行符,读取非空格与换行符的多个字符。当遇到一个空格或换行符就结束读取。
如有帮助,望采纳!谢谢!