关于do while()语句为什么不起作用

问题是输入的三个系数 a、b、c 的判断解的情况:

一元二次方程可能有两个实数解,或者一个实数解,或者无实数解

img

结果就是能运行,循环不起来

考虑再定义一个字符变量ch

img


在这句scanf_s("%c",&m);之后加一句ch=getchar();

希望对题主有所帮助!可以的话,帮忙点个采纳!

#include<cstdio>
int main() {
 int n;
 char c;
 scanf_s("%d", &n);
 printf("输入的数是");
 scanf_s("%c", &c);
 printf("输入的数是%c", c); 
 return 0;
}

输入以上函数时,就会发现也有这个问题,没有执行scanf_s("%c", &c);的语句,原因在于%c前面没有加空格,在%c前面加空格是为忽略前面数据输入时的缓冲区中的回车符,避免被后面的字符作为有效字符读入。
当执行到scanf()时,开始等待用户输入,当我们输入数据,在按下回车键前会把数据储存在缓冲区,按下回车键后,会把数据以及换行符(\n)一起传送到标准输入流(stdin)中,scanf()就是从标准输入流中或许数据,上面第一个scanf()要读入一个整数,它从标准输入流中查找,跳过空白符(空格、换行符、制表符),如果遇到数字,则开始读入,直到遇到非数字的字符结束,最后计算读取到的数值,储存到相关变量中。而后面的scanf把回车读入了。(看了好久资料,才想明白,自问自答了。希望后来者遇到这种问题能不被困惑)

scan格式问题

scanf_s("%c",&m)这一行改为scanf_s("%c",&m,1);
同时这一行前面加一句getchar(),接收掉前面输入浮点数后还在输入缓冲区的换行符