字符串不允许浮点数/十进制数

时间:2014-02-26 12:14:29

标签: 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 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;
                }
            }
        }
    }

我做错了什么?

3 个答案:

答案 0 :(得分:1)

猜测这是您遇到问题的scanf函数中的kalender

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

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


问题已被编辑,我发现我正在关注错误的scanf。但是,我的答案(包括如何解决问题的提示)仍然有效。


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

答案 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来阅读它们。