C语言为什么输入时要输入两次啊?怎么改?
输入两次,是为了把上一个scanf的回车符号给接收掉。ps:避免这种多余字符,还有很多方法,比如:把字符输入写在第一个 ,后面的scanf都写数值的输入。循环接收字符并判断,筛除回车符号。
至于有两次的情况,是这样的:输入一个a,再回车,这样就提供了两次循环的机会:第一次是读到了字符a,第二次是读到了驾车符。所以会有你说的情况。
需要两次的原因:while (getline(cin, line)) //程序停(阻塞)在这里等待输入。
C语言scanf语句变量为什么同时输入两次?
还在键盘缓冲区里,在第8行读入字符时,第一个读入到c1的字符就是这个换行符,第二个读入到c1的字符才是正确的输入字符,所以须2次读入。
scanf(%d %d,&a,&b);由于两个%d之间有空格所以输入时可以在两个输入字符间输入多个空格。同理scanf(%d%d\n,&a,&b);由于两个%d之后有换行符所以输入时换行即回车被忽略了。
外面应该scanf,里面应该scanf,如果输入的数值符合while要求的话,里面的scanf也会,执行,也就是输入两次,可以把外面的那个删掉,加上输入要求提示。
第一次是读到了字符a,第二次是读到了驾车符。所以会有你说的情况。要解决这样的问题,可以,再增加一个变量char c1;把读入语句改为:scanf(%c%c,&c,&c1);—这个c1用来读取字符后面的回车符。
简单解释一下,scanf() 函数中 \n 相当于一个空格,例如 %d\n 首先scanf 跳过空格读取一个整数,然后跳到下一个非空白字符处,像这样写很容易是一些交互式程序挂起,直到用户输入一个非空白字符为止。
也可以像这样scanf(%d %d,&a,&b);中间用空格隔开,那样就可以直接输入 22 33了。scanf 的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。
C语言编程中如何分两次输入?
1、每次要求用户输入时,可以通过调用标准库函数获取用户输入,如:getc(),gets(),getchar(),scanf(%d,&a)等等,你调用几次,程序就会要求用户输入几次。
2、如果要\n,那么得输入两个回车。如果没有\n,输入一次之后第二个没输入就结束。
3、把字符输入写在第一个 ,后面的scanf都写数值的输入。循环接收字符并判断,筛除回车符号。在scanf输入字符前,调用fflush(stdin)清空输入缓存。
4、这种格式下,无论输入缓冲区里有多少字符,scanf(%c,&ch);都只接收最前面的一个赋给ch,但系统要以\n作为输入结束的命令,那么scanf(%c,&ch);在接收一个输入字符时必然会把\n遗留在缓冲区里。
5、因为在代码第7行的输入完成后,换行符 还在键盘缓冲区里,在第8行读入字符时,第一个读入到c1的字符就是这个换行符,第二个读入到c1的字符才是正确的输入字符,所以须2次读入。
6、scanf ( %d, %d , &a, &b ); // 输入变量 a 和 b 的值 指定了输入数据的格式:输入一个十进制数后按,再输入下一个十进制数。