休息和继续(C)

时间:2015-07-12 22:53:29

标签: c break

  

"西蒙说"是一个记忆游戏,其中"西蒙"输出10个字符(R,G,B,Y)的序列,用户必须重复该序列。创建一个for循环,比较从索引0开始的两个字符串。对于每个匹配,将一个点添加到userScore。在不匹配时,使用break语句退出循环。

     

Ex:以下模式产生的userScore为4:

     

simonPattern:R,R,G,B,R,Y,Y,B,G,Y

     

userPattern:R,R,G,B,B,R,Y,B,G,Y

#include <stdio.h>
#include <string.h>

int main(void) {
   char simonPattern[50] = "";
   char userPattern[50] = "";
   int userScore = 0;
   int i = 0;

   userScore = 0;
   strcpy(simonPattern, "RRGBRYYBGY");
   strcpy(userPattern, "RRGBBRYBGY");

   while (userPattern[i] = simonPattern[i]) {
      userScore = userScore + 1;
      ++i;
      if (userPattern[i] != simonPattern[i]) {
         break;
      }
   }

   printf("userScore: %d\n", userScore);

   return 0;
}

我尝试运行代码,但我得到了这个

http://i.imgur.com/T7srTbb.png

有谁知道导致额外1的原因是什么?

感谢。

3 个答案:

答案 0 :(得分:0)

更改while循环中的条件以使用==而不是=。现在你正在做一个作业,而不是比较两个意思,第一个字符总是相同的,得分为1.你可以从循环中删除if语句。

分配要求您使用for循环,而不是一段时间。如果你只是将我移入for循环并填写其余部分,同时将增量移动到!=检查之后它将起作用。

答案 1 :(得分:0)

while (simonPattern.at(i) == userPattern.at(i))
{
++i;
++userScore;
}

答案 2 :(得分:0)

请确保使用“ FOR”循环,我看到您正在使用“ WHILE”循环。您将要使用==比较运算符,而不是=赋值运算符。

这是我的代码,工作正常:

#include <stdio.h>
#include <string.h>

int main(void) {
   char simonPattern[50];
   char userPattern[50];
   int userScore;
   int i;

   userScore = 0;
   strcpy(simonPattern, "RRGBRYYBGY");
   strcpy(userPattern, "RRGBBRYBGY");

   i = 0;

   for ( i = 0; userPattern[i] == simonPattern[i]; ++i) {
      userScore = userScore +1;
      if (userPattern[i] != simonPattern[i]){
         break;
      }
   }


   printf("userScore: %d\n", userScore);

   return 0;
}