在C中如何检测输入是同时是字符还是整数?

时间:2017-03-30 16:00:50

标签: c csv input integer character

对C来说很新,所以对长时间阅读表示道歉,毫无疑问是垃圾编程。

所以我的程序正在读取一个CSV文件,其中包含15种不同晶体管的规格。然后,它将输入与CSV文件中的数据进行比较。在输入数据之后,程序确定哪些晶体管最合适。这意味着循环直到输入字母q,即程序意图停止。

输入输入为例如。

10 0.05 120 5000 20

分别为伏特,安培,功率,频率和增益。该计划并不关心类型,公司或价格。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define MAX 15
#define MAX_IN 10000

struct data{
char type[10], company[10];
int volt, power, freq, gain;
float amp, price;
};

struct input{
int volt, power, freq, gain;
float amp;
};
struct input inputs[MAX_IN];
struct data datas[MAX];


main()
{
    int chk = 1, num=0;
    while(chk == 1)
    {
        chk = input_function(&num);
    }
}

int input_function(int *number)
{
    int j=0;
    char check=0;

    scanf("%c%d %f %d %d %d", &check, &inputs[j].volt, &inputs[j].amp, inputs[j].power, &inputs[j].freq, &inputs[j].gain);

    if(check!='q')
    {
        check_function(j);
        ++*number;
        ++j;
        return 1;
     }
     else
     {
        return 0;
     }
}

num是一个整数,用于确定我输入了多少输入,以便check函数比较输入结构的正确输入。

在以前类似的问题中,使用%c%d让它同时检查字符和整数,但这不起作用。

以前我几乎让它工作了,但它把q作为电压的第一个输入 - 所以之后的每个输入都被一个输出。有人有什么想法吗?

1 个答案:

答案 0 :(得分:3)

scanffscanfsscanfbroken-as-specified EM>。忘记你曾经听过他们。

使用fgets(或getline(如果有))阅读整行。手动检查其第一个字符。如果是q,请退出。否则,使用对strtolstrtod的一连串调用来解析该行并将文本转换为机器编号。 (密切关注strtol / strtod联机帮助文档中解释如何检查错误的部分;这有点棘手。)