Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.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
C 字符串赢了';不允许浮点数/十进制数_C_Arrays_Loops_Floating Point_Numbers - Fatal编程技术网

C 字符串赢了';不允许浮点数/十进制数

C 字符串赢了';不允许浮点数/十进制数,c,arrays,loops,floating-point,numbers,C,Arrays,Loops,Floating Point,Numbers,我正在学习C,在一个教程中发现了这段代码,它工作得很好,但是如果我尝试生成一个十进制数(比如5.5),它会在下面的数组和循环中打印一个负数 #include <stdio.h> #include <locale.h> #include <stdlib.h> #include <math.h> #include "stdafx.h" #define ARBEITER 3 #define TAGE 5 #define ARBEITSKALE

我正在学习C,在一个教程中发现了这段代码,它工作得很好,但是如果我尝试生成一个十进制数(比如5.5),它会在下面的数组和循环中打印一个负数

#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <math.h>
#include "stdafx.h"


#define ARBEITER 3
#define TAGE     5
#define ARBEITSKALENDER kalender();

    int zeitkonto[ARBEITER][TAGE];

    /* Fehlerausgabe */
    void error(int n) {
        printf("%d (?) Falsche Eingabe!!\n", n);
    }

    ABFRAGE0: {
        int i = 0, j = 0;
        for (i = 0; i < TAGE; i++) {
            printf("\n\t[Eingeloggt als: %s ] Tag %d in der Woche\n", vorname, i + 1);
            printf("\t-------------------\n\n");
            for (j = 0; j < ARBEITER; j++) {
                printf("Arbeiter Nr.%d in Std.: ", j + 1);
                scanf("%ld", &zeitkonto[j][i]);
                if (zeitkonto[j][i] > 24) {
                    printf("Ein Tag hat nur 24 Stunden?\n");
                    PCLEAR WHALLOWELT ABSATZ goto ABFRAGE0;
                }
                if (zeitkonto[j][i] > 47) {
                    printf("Wer wünscht sich nicht, man hätte mehr Zeit?");
                    PCLEAR WHALLOWELT ABSATZ goto ABFRAGE0;
                }
            }
        }
    }
#包括
#包括
#包括
#包括
#包括“stdafx.h”
#定义ARBEITER 3
#定义第5阶段
#定义ARBEITSKALENDER kalender();
国际zeitkonto[ARBEITER][TAGE];
/*费勒劳斯加贝*/
无效错误(整数n){
printf(“%d(?)Falsche Eingabe!!\n”,n);
}
ABFRAGE0:{
int i=0,j=0;
对于(i=0;i24){
printf(“Ein Tag hat nur 24 Stunden?\n”);
PCLEAR Whallowlet ABSATZ goto ABFRAGE0;
}
if(zeitkonto[j][i]>47){
printf(“你是谁,我是谁?”);
PCLEAR Whallowlet ABSATZ goto ABFRAGE0;
}
}
}
}
我做错了什么?

我猜是
kalender
函数中的
scanf
有问题

如果阅读,您将看到函数返回成功扫描的项目数。在您的情况下,它将返回一、零或
EOF

如果
scanf
返回一,则表示您成功读取了一个整数。如果返回
EOF
,则用户按下了文件结束键组合(或者出现了另一个错误)。您真正需要注意的情况是
scanf
返回零,如果您输入了一些意外的值,例如浮点值,就会出现这种情况。如果
scanf
失败(当它返回零或
EOF
时),它将不会更改变量的值


这个问题已经被编辑过了,我发现我的重点是错误的
scanf
。然而,我的回答(包括如何解决问题的提示)仍然有效



如果您确实希望能够读取浮点数,当然应该将格式更改为
%f“
%lf”
,并且还必须将数组基类型从
int
更改为
float
double

zeitkonto
是一个整数数组-整数。您需要小数,特别是浮点。这意味着使用
double
%lf
读取它们。

如果希望在
zeitkonto
中使用浮点数,请替换:

int zeitkonto[ARBEITER][TAGE];

替换

scanf("%ld", &zeitkonto[j][i]);

并更换任何

printf("...%ld...", zeitkonto[...][...]) ;


什么是“点数”?这个代码应该做什么?实际上发生了什么?你能把代码缩小到你有问题的一个函数吗?我是说像“5.5”之类的数字。它应该能读出他们每天工作的时间,然后数到第五天。之后,其他功能可以说明每天的平均工作时间是多少,哪位员工在哪一天工作了多长时间,等等。。试着编写尽可能小的测试程序来重现这些问题。这里5行就足够了。当告诉扫描仪读取整数时,不能读取浮点值。我已经试过了-Visual Studio不太喜欢这个。它说我需要用它们作为整数,否则就错了。。它只是说
i
j
必须是整数。这是解决您问题的正确方法,所以问题一定是与您当时使用的确切代码有关。我的程序告诉我我不能这样做,因为
i
j
必须是整数。@MarcTorvalds尝试
%lf
格式,带有
双zeitkonto[ARBEITER][TAGE]。注意
double
类型。不应更改索引变量的类型。下面是该程序的屏幕截图。它又一次自我循环了。。虽然我缩短了代码并将其粘贴到自己的.c文件中。如果在zeitkonto为int时输入“5.5”,我的程序认为输入的值高于24。。。但到目前为止还不错。毕竟它不会打印出那个恼人的错误。如果我把它翻倍,它会再次出错。现在怎么办?如果您有
scanf(“%ld”和&x)
,那么
x
必须是
int
类型。如果您有
scanf(“%f”和&x)
x
必须是
double
类型。请立即修复它。。非常感谢!现在它就像一个符咒:)建议
scanf(“%lf”…
scanf("%f", &zeitkonto[j][i]);
printf("...%ld...", zeitkonto[...][...]) ;
printf("...%f...", zeitkonto[...][...]) ;