【问题标题】:Programming in C, ending a while loop [closed]用C编程,结束一个while循环[关闭]
【发布时间】:2016-11-23 13:46:33
【问题描述】:

我是 C 新手,我在 C 中找到了 1 个用于结束 while 循环的论坛,但该论坛并没有真正帮助,因为它仍然无法正常工作。它给了我一个“预期的;中断前”或“int keep_playing=4”来结束循环。这是一个简单的石头剪刀布游戏,我只是在循环工作,很快就会担心逻辑部分。这是我的代码。

#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;
}

【问题讨论】:

  • 你没有大括号让阅读真的很痛苦。没有大括号的循环只考虑循环声明之后的第一条语句,除非您使用逗号(请不要使用逗号)。由于缩进具有误导性,因此很难说出您的意图是什么。就目前而言,您的程序应该向您发送垃圾邮件“printf(”按'y'播放或'n'退出:“);”因为这是 while 循环看到的唯一语句。
  • 你可以使用"break"来结束一个while循环,而不是改变一个变量的值
  • 你应该使用else if (playornot=='y')
  • 另外,循环不需要 "keep_playing" 变量。您可以简单地使用 while (playornot == 'y') 并在 while 循环外声明 char playornot;

标签: c


【解决方案1】:

你有两个基本问题:

  • 当使用一段时间并且您需要重复大量代码行时,您需要在将要重复的所有代码周围使用大括号 {}。
  • 当您编写 int var 时,您是在声明变量 - 这告诉编译器它是什么类型的变量以及它被调用的内容。以后对此值的更改不需要像您所做的那样重新声明。

【讨论】:

    【解决方案2】:
    #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

    【讨论】:

    • 好的,我想我明白了,但它仍然不能像我想要的那样工作。用户按 y 表示是后,它应该会打印出来。
    • 我做到了,哈哈。它只是坐在那里而不是退出或打印正常。
    • 好的,谢谢。和上次有什么不同?
    • 我只是想知道,是的,我知道。
    • 我认为投票正在检查绿色复选标记?
    猜你喜欢
    • 2019-03-15
    • 2023-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    相关资源
    最近更新 更多