我正在用他的代码帮助一个同学并遇到过这个问题。 我过去曾遇到过scanf的一些问题可能是由于我缺乏经验,但这就是我在这里的原因。
所以,我注意到连续两次调用scanf或从一次调用中获取多个输入可能会有问题。请考虑以下事项。
#include <stdio.h>
#include <stdlib.h>
void main(){
char input1, input2;
//In
fprintf(stdout,"\nInput1: ");
fscanf(stdin,"%d",&input1);
fprintf(stdout,"\nInput2: ");
fscanf(stdin, "%d", &input2);
//Out
fprintf(stdout,"\nInput1: %d Input2: %d\n",input1,input2);
}
为什么scanf会在屏幕上输出所需的input1&amp;值; input2但是当我用printf打印出那两个相同的变量时,第二个值(input2)似乎覆盖了Input1?
这是输出。
Input1: 1
Input2: 0
Input1: 0 Input2: 0
这是否与行缓冲区有关?如果是这样,有人可以向我解释这一点。
谢天谢地。
答案 0 :(得分:1)
将char input1, input2;
更改为int input1, input2;
答案 1 :(得分:0)
首先,您应该(通常,特别是对于交互式程序)将\n
放在 end 而不是printf
fprintf
格式控制字符串的开头。或者使用fflush
BTW,%d
适用于int
,因此声明int input1, input2;
并启用GCC的所有警告,例如使用gcc -Wall -Wextra -g
进行编译时,您会收到警告。
然后,您应始终测试scanf
(或fscanf
)的结果;它给出了读取项目的数量。
见printf(3),fprintf(3),fflush(3),fscanf(3)
如果在Linux上,请参阅this answer关于不等待实线的信息。
答案 2 :(得分:0)
关于变量类型scanf()
和printf()
,您对input1
和input2
都撒谎。 %d
字段描述符承诺相应的参数是int
(或指向scanf()
的指针),但代码中的实际类型为char
。生成的程序的行为未定义。
如果我更改变量,你的程序对我来说没问题。输入int
。
答案 3 :(得分:0)
您使用%d读取整数并存储在char类型的变量中,这是完全错误的。