连续调用scanf

时间:2015-04-08 18:18:32

标签: c

我正在用他的代码帮助一个同学并遇到过这个问题。 我过去曾遇到过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

这是否与行缓冲区有关?如果是这样,有人可以向我解释这一点。

谢天谢地。

4 个答案:

答案 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(),您对input1input2都撒谎。 %d字段描述符承诺相应的参数是int(或指向scanf()的指针),但代码中的实际类型为char。生成的程序的行为未定义。

如果我更改变量,你的程序对我来说没问题。输入int

答案 3 :(得分:0)

您使用%d读取整数并存储在char类型的变量中,这是完全错误的。

相关问题