想请教一下为什么下面这串代码有两个scanf,但是却能够运行而且结果是对的,但只有一个scanf的话运行结果是错的
#include<stdio.h>
int main() {
int n;
char c;
scanf_s("%d", &n);
printf("请输入您所要加密的字符串:");
scanf_s("%d", &n);
while ((c = getchar()) != '\n')
{
c = c + n;
printf("%c", c);
}
return 0;
}
代码得问题,主要是和scanf_s() 函数从键盘读入时,碰到 空格 换行符等字符时,停止读入而将字符残留在输入缓冲区里,从而造成后面的c=getchar()出现误判断,建议修改如下,见注释,供参考:
#include<stdio.h>
int main() {
int n;
char c;
scanf_s("%d", &n);
getchar(); //添加这行,吸收输入缓冲区里残留的 '\n' 符
printf("请输入您所要加密的字符串:");
//scanf_s("%d", &n); 这行删除
while ((c = getchar()) != '\n')
{
c = c + n;
printf("%c", c);
}
return 0;
}
你注视的是哪个
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
if (n % 2 == 0)
{
printf("Even\n");
}
else
{
printf("Odd\n");
}
}
return 0;
}
我们这里先来给大家,介绍一下,如何利用循环实现多组输入的问题,我们可以利用scanf的返回值来作为判断条件,让他和EOF来进行比较,如果不等于EOF我们就继续进行scanf的数据的录入,当然我们在输入数字这一类型的数据时,回车这个东西在我们scanf从缓冲区中拿走数字之后,直接就被销毁了(我是这么理解的,当然你也可以把他理解为,scanf自动忽略了\n),这里如果想让程序结束的话,可以用crtl+z来控制程序的结束