【问题标题】:Want to create some kind of a loop for this code想为此代码创建某种循环
【发布时间】:2019-07-31 23:24:13
【问题描述】:

我是编程新手,我看了一个 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 或 unknown 命令一样,我希望它要求我再次输入我的名字。我希望你能理解我想要做什么,并为我仍在学习的糟糕的英语感到抱歉:D。

【问题讨论】:

  • characterName = malloc(sizeof(char)); 您仅为零终止字符分配内存。 yesno 字符串没有内存。没有内存可以读入名字。

标签: c loops


【解决方案1】:

就像编程中的大多数事情一样,有很多方法可以满足您的要求。

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

另一件事,这些行:

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

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

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

【讨论】:

    【解决方案2】:

    好的,您在此处收到 strcmp 的隐式声明警告,缺少 #include &lt;string.h&gt;,但代码编译得很好,并且它完成了迄今为止应该做的事情。

    现在我们给它添加循环:

    #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) { .. } 中的代码始终为真(1 为真),直到您输入“yes”并点击break;

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

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

    【讨论】:

    • 非常感谢,我喜欢你把整个代码和循环放在里面,因为我是新手,我还在学习。欣赏它! :D
    猜你喜欢
    • 2022-01-21
    • 2013-11-15
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    • 2021-10-24
    相关资源
    最近更新 更多