1

这一点点 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

4 回答 4

5

删除.3部分:

scanf("%f", &Vin);

为输入配置十进制位数并没有真正意义:) 因此,scanf不支持它。Afloat总是有 8 个十进制数字。提高编译器的警告级别。

于 2013-02-01T22:18:08.917 回答
5

如果您打开-Wall编译器,您会收到以下警告:

警告:未知转换类型字符“。” 格式为 [-Wformat]

警告:格式参数过多 [-Wformat-extra-args]

因此,只需从 .3 中删除 .3 即可scanf

于 2013-02-01T22:18:52.693 回答
3

使用简单的 %f。这是示例:

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

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

printf("\nResistor 2: ");
scanf("%d", &R2);
于 2013-02-01T22:17:07.157 回答
3

在这里从臀部射击-我的直觉说,第一个scanf是您的输入字符串“满意”,还有输入,第二个scanf是将所有内容都添加到换行符。

尝试替换第一个格式字符串,"%f"看看它是否仍然发生。或者,当您看到愚蠢的行为时,打印出电压和 R1 的值。无论如何,在阅读后担心舍入/截断电压输入可能会更好。

于 2013-02-01T22:19:21.580 回答