我不熟悉在C语言中使用字符串,并且需要从包含字符串和数字的数据文件行中读取数据,并在进行时解析它们。我已经完成了类似的程序读取数字,例如有序对的列表,使用for循环,所以这是我倾向于的策略。
文件中数据行的示例:PART,2.000,-1,0.050,V
当我编译时,我在'char'之前的“预期表达式”的for循环声明中得到一个错误。在此代码中缺少什么或需要检查?
#define flush fflush(stdin)
#define N 50
int main()
{
flush;
const char part[] = "PART"; // String for PART variable
char descriptor[N]; // Starting string of data set
double p_dim[N]; // Array for part dimensions
int t_sens[N]; // Array for sensitivity values: -1 or +1
double t[N]; // Array for part tolerance, bilateral
char t_status[N]; // Array for tolerance status, F(ixed) or V(ariable)
double key_max; // Maximum value of key characteristic
double key_min; // Minimum value of key characteristic
FILE* fpin;
if((fpin = fopen("input.txt","r"))==(FILE*)NULL)
{
printf("File input does not exist\n"); exit(-1);
}
// For loop to parse data lines from file
for(N; char* fgets(descriptor, int N, FILE* fpin); N-1);
{
compare(descriptor, part);
if (descriptor == part)
{
fscanf(fpin, "%lf,%d,%lf,%s", p_dim[N], t_sens[N], t[N], t_status[N]);
}
else if (descriptor != part)
{
fscanf(fpin, "%lf, %lf", &key_min, &key_max);
}
}
答案 0 :(得分:1)
1。)#define flush fflush(stdin)
刷新stdin
调用未定义的行为。
2。)if((fpin = fopen("input.txt","r"))==(FILE*)NULL)
(FILE*)
的演员阵容是多余的。
3。)for(N; ... ; N-1);
您将N
定义为常量(#define N 50
),因此此循环不会退出。
4。)for(... ; char* fgets(descriptor, int N, FILE* fpin); ...);
这是完全错误的......
答案 1 :(得分:0)
我更倾向于打破弦乐
请参阅问题3501338,逐行读取文件
请参阅问题15472299,使用strtok拆分字符串
如果你需要将字符串转换为数字,请使用sscanf