Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的程序每次运行都返回第一个输入值而不返回小数点? #包括 内部主(空){ int计数,值; 双平均值,总和; 计数=0; 总和=0; printf(“请输入您有多少个整数”); scanf(“%d”、&count); for(int i=0;iscanf(“%lf”、&value)scanf(“%d”,和值)-->scanf(“%lf”、&value)_C_For Loop_Int_Scanf - Fatal编程技术网

为什么我的程序每次运行都返回第一个输入值而不返回小数点? #包括 内部主(空){ int计数,值; 双平均值,总和; 计数=0; 总和=0; printf(“请输入您有多少个整数”); scanf(“%d”、&count); for(int i=0;iscanf(“%lf”、&value)scanf(“%d”,和值)-->scanf(“%lf”、&value)

为什么我的程序每次运行都返回第一个输入值而不返回小数点? #包括 内部主(空){ int计数,值; 双平均值,总和; 计数=0; 总和=0; printf(“请输入您有多少个整数”); scanf(“%d”、&count); for(int i=0;iscanf(“%lf”、&value)scanf(“%d”,和值)-->scanf(“%lf”、&value),c,for-loop,int,scanf,C,For Loop,Int,Scanf,示例:计数输入为4。输入值为7.6,1,2,3 我知道在for循环scanf中首先看到7.6,但忽略小数点,因为它不是有效的输入形式,并在循环中的每个后续scanf中传递它,尽管他们从未真正接受输入。这将导致仅输入值为7,但程序应继续将7除以4以检索“预期”平均值,但事实并非如此。我最终得到了700万,我不知道为什么会这样 忽略我提示用户输入整数值的事实,即使输入了浮点值,因为这是我家庭作业的一部分。任何关于我应该学习的东西的提示或参考都会很好 我知道在for循环中scanf首先看到7.6,但忽

示例:计数输入为
4
。输入值为
7.6,1,2,3

我知道在for循环
scanf
中首先看到
7.6
,但忽略小数点,因为它不是有效的输入形式,并在循环中的每个后续
scanf
中传递它,尽管他们从未真正接受输入。这将导致仅输入值为7,但程序应继续将7除以4以检索“预期”平均值,但事实并非如此。我最终得到了700万,我不知道为什么会这样

忽略我提示用户输入整数值的事实,即使输入了浮点值,因为这是我家庭作业的一部分。任何关于我应该学习的东西的提示或参考都会很好

我知道在for循环中scanf首先看到7.6,但忽略小数点[…]

否。这是匹配失败,因为您输入的输入(
7.6
)与格式说明符
%d
不匹配。因此,
scanf()
失败。这就是为什么您应该始终检查所有标准函数的返回代码。看

如果您希望能够读取浮点值,那么您应该读取(更改代码)以读取浮点(或双精度)

例如,要读取一个
双精度

#include <stdio.h>

int main (void) {

    int count, value;
    double avg, sum;
    count = 0;
    sum = 0;
    printf("please input how many integers you have \n");
    scanf("%d", &count);

    for (int i = 0; i < count; i++) {
        printf("please input your values \n");
        scanf("%d", &value);
        sum = sum + value;
    }
    avg = sum / count;
    printf("your average is " "%f", avg);
}
一般建议:尽可能不要使用
scanf()
。请阅读进一步解释

我知道在for循环中scanf首先看到7.6,但忽略小数点[…]

否。这是匹配失败,因为您输入的输入(
7.6
)与格式说明符
%d
不匹配。因此,
scanf()
失败。这就是为什么您应该始终检查所有标准函数的返回代码。看

如果您希望能够读取浮点值,那么您应该读取(更改代码)以读取浮点(或双精度)

例如,要读取一个
双精度

#include <stdio.h>

int main (void) {

    int count, value;
    double avg, sum;
    count = 0;
    sum = 0;
    printf("please input how many integers you have \n");
    scanf("%d", &count);

    for (int i = 0; i < count; i++) {
        printf("please input your values \n");
        scanf("%d", &value);
        sum = sum + value;
    }
    avg = sum / count;
    printf("your average is " "%f", avg);
}

一般建议:尽可能不要使用
scanf()
。请阅读进一步解释。

您的推理似乎是正确的,除了假设
scanf
将在后续迭代中将
值设置为零。相反,在读取第一次迭代的周期并将7分配给
value
之后,在随后的迭代中
scanf
将看到周期,得出输入与格式不匹配的结论,并且根本不触摸
value
,在每次迭代中将其保留为7。(第一次迭代应返回1,后续迭代应返回0,以指示匹配和分配的项目数)


因此,循环将在每次迭代中添加7,然后除以迭代次数,得到7的结果。

您的推理似乎是正确的,除了假设
scanf
将在后续迭代中将
值设置为零。相反,在读取第一次迭代的周期并将7分配给
value
之后,在随后的迭代中
scanf
将看到周期,得出输入与格式不匹配的结论,并且根本不触摸
value
,在每次迭代中将其保留为7。(第一次迭代应返回1,后续迭代应返回0,以指示匹配和分配的项目数)


因此,循环将在每次迭代中添加7,然后除以迭代次数,得到7的结果。

scanf(“%d”,&value)-->
scanf(“%lf”、&value)
scanf(“%d”,和值)-->
scanf(“%lf”、&value)%d
,类型是
int
。在我看来,与给定格式不匹配的输入只会导致匹配失败,并使
scanf
以较小的返回值提前返回-在这种情况下,在第一次时,它应该与时段匹配。(如果你不同意,我非常希望有一个指针指向标准中应该使其未定义的部分)我不是语言律师,但我很确定这不是未定义的行为。如果变量的类型与格式说明符不匹配,则可以,但格式说明符是
%d
,类型是
int
。在我看来,与给定格式不匹配的输入只会导致匹配失败,并使
scanf
以较小的返回值提前返回-在这种情况下,在第一次时,它应该与时段匹配。(如果您不同意,我非常希望有一个指针指向标准中可能使其未定义的部分)感谢您的评论,这确实是一个匹配失败(这不是未定义的行为)。我被纠正了+1.感谢您的评论,这确实是一个匹配的失败(这不是未定义的行为)。我被纠正了+1.