【问题标题】:setting the if else condition for filtering data设置过滤数据的 if else 条件
【发布时间】:2016-02-11 01:51:03
【问题描述】:

我对这里的 if else 语句感到困惑。我的源代码能够对txt文件中的数据进行fscan,并且能够成功地printf。

我喜欢做的下一步是设置 if else 语句,如果 src 介于 1-1024 之间,然后将该行写入另一个 txt 文件,否则如果超过 1024 则应该写入另一个 txt 文件。

我一直在尝试结合下面的两个代码,但无法让它工作。

do {
    test = fscanf(inFile, "%d:%d:%d:%d:", &src, &dest, &type, &port);//read line from file
    fgets(data, 100, inFile);
    printf("%d %d %d %d %s", src, dest, type, port, data);

    } while (test != EOF);


if (src >= 1 && src <= 1024){

    FILE *outFile = fopen("data_1.txt", "w");
    fprintf(outFile, "%d %d %d %d %s", "data_1.txt");
    //outFile = cfopen("data_1.txt", "w"); //Open file for writing
    //fprintf("%d %d %d %d %s", src, dest, type, port, data);
}
else {
    fclose(outFile);//must always close file once done
}


fclose(outFile);
fclose(inFile); //must always close file once done

return 0;

}

【问题讨论】:

  • 输出例程中的printf应该是fprintf(outFile, etc)吗?否则,您将输出到 stdio,而不是 data_1.txt。
  • 你为什么打电话给fscanf,然后是fgets?从同一个文件指针?一个或另一个就足够了吗?
  • @Mike 是的,我需要更改 printf 部分
  • @David,这是因为数据的最后一部分包含字符和空格... fscanf 不起作用,所以我必须在最后一部分使用 fgets
  • 在什么方面不起作用?实际发生了什么?你期望会发生什么?在srcdest 测试中,当值介于 1 和 1024(含)之间时(空)if 块中的代码将运行,任何其他值 - 包括 0、负数和大于 1024 的值 -将导致else 块中的代码运行。

标签: c if-statement fopen scanf


【解决方案1】:

如果超过 1024 则为其他

你说的,你需要使用else if(src &gt; 1024)

【讨论】:

  • 这是不必要的。 OP 中的 'else' 处理值大于 1024 的情况;这正是“其他”的意思。它还处理值为 0 或负数的情况,但这是一个不同的问题(可能)。
  • @MikeofSST 如果值为 less 呢?比如-5?
  • @MikeofSST你为什么不赞成这个答案? OP 只需要检查值是否为greater 而不是less
  • 我假设@Kotshi 的意思是答案中的代码是问题中代码的扩展。即if(1&lt;=src &amp;&amp; src&lt;=1024){ /*do something with 1..1024 values*/ } else if(src &gt; 1024) { /*do something else with values &gt; 1024*/ } 你可以添加另一个else { /* do something with 0 &amp; -ve values*/ } 来完成,我想。
  • @MikeofSST 我对他能做什么不感兴趣,请坚持这个问题。你为什么不赞成那个答案?请解释
猜你喜欢
  • 2021-06-02
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
相关资源
最近更新 更多