【问题标题】:Complex Logic Trouble in C [closed]C中的复杂逻辑问题[关闭]
【发布时间】:2013-02-08 19:22:08
【问题描述】:

我无法想出下面的代码块并确保它有效。

我有三个可能的输入词,分别称为 A、B 和 C。

    //The following if-else block sets the variables TextA, TextB, and TextC to the    appropriate Supply Types.
if(strcmp(word,TextB)!=0 && strcmp(word,TextC)!=0 && i==1 && strcmp("",TextB)!=0) {
     strcpy(TextA,word);
}
else if(strcmp(word,TextA)!=0 && strcmp(word,TextC)!=0 && i==1 && strcmp("",TextC)!=0) {
  strcpy(TextB,word);
}
else if(strcmp(word,TextB)!=0 && strcmp(word,TextA)!=0 && i==1) {
  strcpy(TextC,word);
}

我想要发生的是,如果 TextA 中没有任何内容(当 i=1 时第一次在 AKA 附近;这一切都在一个循环中)然后将 word 写入 TextA。但是,如果 TextA 中确实包含某些内容,则将 word 写入 TextB。如果 TextB 中有内容,请将 TextC 设置为 word。我可以将单词重新复制到正确的位置,因为只有 3 个选项。

【问题讨论】:

  • 请将所有 strcmp 结果放入某个变量中。代码很难像这样可读。它还将帮助您确定您的逻辑是否正确。
  • 我不知道你把它们拉进一个变量是什么意思?
  • 类似int wordEqualTextA = !strcmp(word, textA);
  • 我原以为这是您想要一个单词数组而不是三个不同变量的情况。

标签: c logic


【解决方案1】:

好的,您正在循环执行此操作,但所有三个检查都有i==1,这意味着您一次只会进入其中一个块。 (当i 为 1 时)。

通常,当您在整个 if/else if 条件块中进行相同的检查(逻辑与)时,您可以将其拉出块:

if (i == 1){
   //do all the other checks
}

但是想想这是否是你真正想要做的......根据你对你要解决的问题的描述,我认为你根本不需要检查i
如果您阅读了您在这个 SO 问题中所写的内容,那么代码实际上就是从中出现的:

如果 TextA 中没有任何内容,则将 word 写入 TextA
如果 TextA 中确实包含某些内容,则将单词写入 TextB
如果TextB里面有东西,把TextC设置成word

所以遵循该逻辑的代码:

if (strlen(TextA) == 0)       // if TextA has nothing in it,
    strcpy(TextA, word);      // then write word to TextA
else if (strlen(TextB) == 0)  // else (if TextB doesn't have anything in it)
    strcpy(TextB, word);      // write word to TextB
else                          // if TextA and TextB already have something
    strcpy(TextC, word);      // then write word to TextC

【讨论】:

  • 这行不通,因为它们可能会出现重复值。例如,我可以连续获得三个 A,然后是一个 B。
  • 仍在调试这个。有人对如何解决这个问题有任何提示吗?我需要尽快完成。
  • @user2055216 - 好的,您的要求对我来说并不完全清楚。你能给出一个在循环的每次迭代中你期望的确切例子吗?您使用的真实变量名称是什么?你什么时候在“TextX”中存储一个单词?你说的不仅仅是因为它是空的,所以......是什么告诉我将它存储在 B 而不是 A 或 C 中?
猜你喜欢
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多