想要为此代码创建某种循环

时间:2019-07-31 23:24:13

标签: c loops

我是编程新手,我看了一个c语言的教程(大约3个小时),我立即编写了这段代码。现在一切正常,但是我想创建某种循环,我将尽力解释我想要的。

这是我写的代码:

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


int main()
{
    char *characterName;
    char *yes_no;

    characterName = malloc(sizeof(char));
    yes_no = malloc(sizeof(char));

    printf("Enter you name: ");
    scanf("%s", characterName);
    printf("Are you sure[Yes/No]: ");
    scanf("%s", yes_no);

    if(strcmp(yes_no, "Yes") == 0 || strcmp(yes_no, "yes") == 0)
    {
        printf("Your name is %s", characterName);
    }
    else if(strcmp(yes_no, "No") == 0 || strcmp(yes_no, "no") == 0)
    {
        printf("Try again!");
    }
    else
    {
        printf("Unknown command!");
    }

    return 0;
}

它的作用是基本上要求您输入名称,然后进行确认,如果您输入“是”或“是”,它将打印出您的名字,如果您输入“否”或“否”,则将再次打印,如果您输入除了“是/是”或“否/否”以外的其他内容,它将打印未知命令。现在,我想知道的是如何制作一个循环,除非我输入“是”,否则该循环将一遍又一遍地重复。 就像我输入了no或未知命令一样,我希望它再次要求我输入我的名字。希望您能理解我要做什么,并为我仍在学习:D的英语不好而感到抱歉。

2 个答案:

答案 0 :(得分:4)

就像编程中的大多数事情一样,有很多方法可以完成您要问的事情。

一种方法是引入一个名为yes_entered或类似名称的新变量,该变量将跟踪用户是否输入了yes。然后,在if语句中(您检查是否输入了yes)中,可以将此变量设置为true。要将其放入循环中,可以将要重复的代码放在while(!yes_entered){循环中。

另一件事,这些行:

characterName = malloc(sizeof(char));
yes_no = malloc(sizeof(char));

会给您带来麻烦。您正在将两个char数组分配为一个char的大小。对于这种情况,您可能应该考虑选择最大字符长度,然后将这两个变量设为静态char数组。像这样:

char characterName[MAX_NAME_LENGTH] ;
char yes_no[MAX_CONF_LENGTH];

答案 1 :(得分:3)

好吧,您在那里收到一个关于strcmp的隐式声明警告,缺少#include <string.h>,但是代码编译的很好,并且到目前为止它已经做了。

现在,我们向其添加循环:

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

int main() {
    char *characterName;
    char *yes_no;

    characterName = malloc(sizeof(char));
    yes_no = malloc(sizeof(char));

    printf("Enter you name: ");
    scanf("%s", characterName);
    while(1) {
        printf("Are you sure[Yes/No]: ");
        scanf("%s", yes_no);

        if(strcmp(yes_no, "Yes") == 0 || strcmp(yes_no, "yes") == 0){
            printf("Your name is %s", characterName);
            break;
        }
        else if(strcmp(yes_no, "No") == 0 || strcmp(yes_no, "no") == 0){
            printf("Try again!");
        } else {
            printf("Unknown command!");
        }
    }

  return 0;
}

while(1) { .. }中的代码始终为true(1为true),直到您键入“ yes”并点击break;

正如评论员指出的那样,存在一些内存分配问题。

在这里尝试:https://onlinegdb.com/HJYRvokQH