【问题标题】:comments longer than one line超过一行的评论
【发布时间】:2016-01-13 18:44:27
【问题描述】:

所以我想知道这是否正确;我必须计算文件中超过一行的 cmets:

    void commentsLongerThanOneLine(FILE* inputStream, FILE* outputStream) {
char c;
int i = 0;
while ((c = fgetc(inputStream) != EOF)) {
    if (c == '/' && '*' && '\n') i++;
}
printf("Number of comments longer than one line is : %d\n", i);
return 0;

}

【问题讨论】:

  • 首先您需要了解条件及其工作原理。并了解分配= 和相等比较== 之间的区别。
  • c='/' && '*' 到底是什么?这根本没有意义。您正在尝试将 c 与多个值进行比较,但它不会那样工作。
  • 这比你想象的要复杂。注释指示符可能在文字字符串中,// 样式可能被更重要的 /* comment */ 注释掉
  • && 表示布尔值并且相等性的测试是 == 不是 =,即使该行按照您的想法工作,它也总是错误的,因为您似乎测试 c 与斜杠和星号和新行这是不可能的。您需要检查斜杠设置标志并检查下一个字符是否为星号然后验证注释结束前是否有新行(*/)另请参阅下面的注释关于//如何跨越多行并检查/* 不在 //
  • 不要忘记 //comment 如果包含续行符号 `\` 可以跨越多行(尽管 MSVC 会针对此类注释给出警告)。

标签: c filesystems comments


【解决方案1】:

&& 表示布尔值并且相等的测试是 == 不是 =,

您需要单独测试每个指标。

if ((c == '/') && (c == '*') && (c == '\n'))

当然这总是会产生 FALSE,因为这是一个不可能的陈述。

即使该行按照您的想法工作,它也总是错误的,因为您似乎将 c 与斜杠、星号和新行进行测试,这是不可能的。你需要检查斜杠设置一个标志并检查下一个字符是否是星号然后验证在注释结束之前有一个新行(*/)

// 可以跨越多行,您需要检查 /* 是否不在 // 内,反之亦然。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 2014-05-14
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    相关资源
    最近更新 更多