【发布时间】:2017-08-24 16:10:19
【问题描述】:
对 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 是一个整数,用于确定我输入了多少输入,以便检查函数比较输入结构的正确输入。
在以前的类似问题中,使用 %c%d 让它同时检查字符和整数,但这不起作用。
以前我几乎可以使用它,但是它以 q 作为电压的第一个输入 - 所以之后的每个输入都关闭了一个。有人有什么想法吗?
【问题讨论】:
-
如果您通过
fgets获得输入,您可以在闲暇时检查该字符串。不要忘记它保留的尾随newline。一旦确定不是退出,请申请sscanf。 -
另外,您应该检查来自
scanf的返回值(如果删除%c,则为5)。如果第一个字符是'q',那么整数转换将被拒绝,'q'保留在输入缓冲区中。但是您还需要考虑逗号:您说它们是 CSV 文件。在这种情况下,我会使用fgets和strtok或其可重入版本。 -
当我使用 fgets 时它不会提示输入任何内容?我该怎么做?
-
我不懂你。程序无论如何都没有输入提示。
-
scanf(" %c", &check); if(check!='q'){ ungetc(check, stdin); scanf("%d %f %d %d %d", &inputs[j].volt, ...。还有int j=0;-->int j = *number;
标签: c csv input integer character