我正在学习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;
}
}
}
}
我做错了什么?
答案 0 :(得分:1)
我猜测这是您遇到问题的scanf
函数中的kalender
。
如果您阅读scanf
,您会看到该函数返回成功扫描的项目数。在您的情况下,它将返回1,零或EOF
。
如果scanf
返回1,则表示您已成功读取整数。如果它返回EOF
,则用户按下文件结束键组合(或者有另一个错误)。您真正需要注意的情况是scanf
返回零时,如果输入意外情况,就会发生这种情况,例如浮点值。如果scanf
失败(当它返回零或EOF
时),它将不更改变量的值。
问题已被编辑,我发现我正在关注错误的scanf
。但是,我的答案(包括如何解决问题的提示)仍然有效。
如果您 希望能够读取浮点数,您当然应该将格式更改为"%f"
或"%lf"
,并且您还必须 将数组基本类型从int
更改为float
或double
。
答案 1 :(得分:1)
如果您想要zeitkonto
中的浮点数,请替换:
int zeitkonto[ARBEITER][TAGE];
通过
double zeitkonto[ARBEITER][TAGE];
并替换
scanf("%ld", &zeitkonto[j][i]);
通过
scanf("%f", &zeitkonto[j][i]);
并且还替换任何
printf("...%ld...", zeitkonto[...][...]) ;
通过
printf("...%f...", zeitkonto[...][...]) ;
答案 2 :(得分:0)
zeitkonto
是一个整数数组 - 整数。您需要小数,特别是浮点数。这意味着使用double
和%lf
来阅读它们。