2016-11-23 178 views
0

我是C新手,在C语言中找到1个论坛来结束一个while循环,并且那个人没有真正的帮助,因为它仍然不起作用。它给了我一个“期待;休息之前”或“int keep_playing = 4”来结束循环。这是一个简单的摇滚纸剪刀游戏,我只是在循环上工作,很快就会担心逻辑部分。这是我的代码。用C语言编程,结束一个while循环

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main() 
{ 
    printf("Welcome to rock paper scissors!\n"); 
    int keep_playing=5; 
    while (keep_playing==5) 
     printf("Press 'y' to play or 'n' to quit: "); 
     char playornot; 
     scanf("%c\n",&playornot); 
     if (playornot=='y') 
      printf("Ok.\n"); 
     else (playornot=='y') 
      int keep_playing=4; 

    return 0; 
} 
+2

你缺乏大括号使阅读真的很痛苦。虽然没有大括号的循环只考虑循环声明后的第一个语句,除非你使用逗号(请不要使用常规)。由于缩进是误导性的,因此很难说出你的意图是什么。按照规定,你的程序应该用“printf(”按'y'播放或'n'退出:“);”;因为这是循环看到的唯一声明。 – Dmitry

+1

可能重复[我如何根据用户输入退出一段时间(1)](http://stackoverflow.com/questions/38913603/how-can-i-exit-a-while1-based-on-一个用户输入) – xenteros

+0

你可以使用“break”来结束一个while循环而不是改变一个变量的值 –

回答

1
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main() { 
    printf("Welcome to rock paper scissors!\n"); 
    int keep_playing=5; 
    while (keep_playing==5) { 
     printf("Press 'y' to play or 'n' to quit: "); 
     char playornot; 
     scanf("%c",&playornot); 
     if (playornot=='y') { 
      printf("Ok.\n"); 
     } else if (playornot=='n') { 
      keep_playing=4; 
     } 
    } 
    return 0; 
} 

是您的代码应该是什么样子等。在你的情况下,有一个无限循环,因为唯一重复的行是printf("Press 'y' to play or 'n' to quit: ");。这是由花括号的运气造成的。

然后,你有一个错字,我会说 - 多余intint keep_playing=4。这声明了另一个变量,仅在此范围内可见。实际上,如果没有大括号,它应该会导致错误,因为在那个时刻它的范围相同。

还有第三个错误,没有人提到过。如果输入的字符不是y,它应该是n。否则,你应该要求另一个输入或以某种方式决定如何处理它。

而第四个是你试图扫描两个字符到char playornot。从scanf删除\n

+0

好吧,我想我明白了,但它仍然不像我想要的那样工作。在用户按下y之后,它应该打印确定。 –

+0

我做到了,哈哈。它只是坐在那里,而不是退出或打印好。 –

+0

是的,谢谢。与上次不同的是什么? –

2

你有2个基本问题:

使用而当
  • ,你需要重复一大堆的代码行,你需要使用大括号{}周围所有的代码是要重复。
  • 当你写int变量你是声明变量 - 这告诉编译器它是什么样的变量和它被调用。稍后更改此值不需要重新声明,因为您正在进行此操作。