简单的C奇怪

时间:2013-02-01 22:12:39

标签: c

这一点C代码让我疯狂。它要求输入电压,但它跳过电阻1并要求电阻2.我在这里遗漏了一些非常明显的东西......到底发生了什么......

#include <stdio.h>
int main() 
{
    float Vin;
    int R1;  
    int R2;

    printf("Input Voltage: ");
    scanf("%.3f", &Vin);

    printf("\nResistor 1: ");
    scanf("%d", &R1);

    printf("\nResistor 2: ");
    scanf("%d", &R2);

    return(0);
}

4 个答案:

答案 0 :(得分:5)

删除.3部分:

scanf("%f", &Vin);

配置输入的小数位数没有意义:)因此,scanf不支持它。 float总是有8位小数。提高编译器的警告级别。

答案 1 :(得分:5)

如果在编译器上打开-Wall,则会收到警告:

  

警告:未知转化类型字符'。'格式为[-Wformat]

     

警告:格式[-Wformat-extra-args]

的参数太多

所以只需从scanf删除.3。

答案 2 :(得分:3)

使用简单的%f。这是样本:

printf("Input Voltage: ");
scanf("%f", &Vin);

printf("\nResistor 1: ");
scanf("%d", &R1);

printf("\nResistor 2: ");
scanf("%d", &R2);

答案 3 :(得分:3)

在这里从臀部拍摄 - 我的直觉说第一个scanf被你的输入字符串“满足”,剩下的输入,第二个scanf让所有内容都到达换行符

尝试用"%f"替换第一个格式字符串,看看它是否仍然存在。或者,当您看到傻瓜行为时,打印出电压和R1的值。无论如何,最好还是担心在阅读之后对电压输入进行舍入/截断。