我正在查看文件。如果我遇到'#'我想忽略一切,直到我''n' 。我目前的逻辑不起作用。
我试图从文件中删除评论 我认为这个问题与我在第二个while循环中的逻辑有关
int wishforint(FILE *in)
{
char c;
int d;
int i=0;
int smarr[5];
while(i<5)
{
fscanf(in, "%c", &c);
printf("c is %c\n",c);
if(isdigit(c))
{
ungetc(c, in);
fscanf(in, "%d", &d);
/*add this later.
return d;
*/
smarr[i]=d;
printf("smarr[%d]= %d\n",i,d);
i++;
}
else if(c=='#')
{
while(fscanf(in,"%c",&c) != EOF && c != '\n')
{}
break;
}
}
printf("Width is = %d\n", smarr[1]);
printf("Height is= %d\n", smarr[2]);
printf("Max value= %d\n", smarr[3]);
return 7;
}
答案 0 :(得分:4)
'#'不是数字,因此您可能会在continue
之前点击else if
。
答案 1 :(得分:1)
代码有两个问题。
首先fscanf不检查EOF。修正:
//fscanf(in, "%c", &c); if (fscanf(in, "%c", &c) == EOF) { break; }
其次,“#”条款中不应该有“中断”:
else if(c=='#') { while(fscanf(in,"%c",&c) != EOF && c != '\n') {} //break; }
答案 2 :(得分:0)
可能会更容易使用sscanf和fgets吗?
可能是这样的:
while (fgets(buf, BUF_LENGTH, in) != NULL){
errno=0;
if ((sscanf(buf, "%d", &d) == 0) && (errno == 0)){
//we have a comment
continue;
}else if(errno != 0){
//error handling
}
//we have a value
smarr[i]=d;
i++;
}
它应该适用于单值列表文件。评论从新行开始或价值之后开始。
您能否展示输入数据的示例?