do-在C中具有多个条件的while循环

问题描述 投票:1回答:4

我正在尝试在用户键入“退出”或“退出”时使while - do循环退出。由于某种我无法理解的原因,我根本无法实现。如果我分别应用这些条件之一,则效果很好,但我需要同时拥有两个条件。

我在线搜索,甚至在不同的编程语言上也找到了几个示例,例如(PHP)Do-While Loop with Multiple Conditions,(Python)How to do while loops with multiple conditions,(C ++)Using multiple conditions in a do…while loop] >等。但是无论我遵循什么程序,我都可以使其同时在两种条件下工作。

理想的解决方案是也添加大写条件,但是一旦解决此问题,我便可以稍后使用。

也许有一双新鲜的眼睛看到我缺少的东西。

代码示例如下:

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

#define MAX_CHARACTERS 250
#define MAX_USERNAME 12
#define MAX_USERS 1024
#define MIN_REQUIRED 3
#define MAX_PORT 65536
#define MIN_PORT 1

typedef struct rec {
  char username[MAX_USERNAME];
  char msg[MAX_CHARACTERS];
}RECORD;

/* Usage Instructions void because we do not have any return */
int help(void) {
  printf("Usage: test.c [-s <arg0>] [-s <arg1>]\n");
  printf("\t-s: a string program name <arg0>\n");
  printf("\t-s: a string with a Nickname maximum characters %i <arg2>\n",MAX_USERNAME);
  return (1);
}

int main(int argc, char **argv) {

  if ( argc < MIN_REQUIRED ) {
    printf ("Please follow the instructions: not less than %i argument inputs\n", MIN_REQUIRED);
    return help();
  }
  else if ( argc > MIN_REQUIRED ) {
    printf ("Please follow the instructions: not more than %i argument inputs\n", MIN_REQUIRED);
    return help();
  }
  else {

    RECORD *ptr_record;

    ptr_record = (RECORD *) malloc (sizeof(RECORD));

    if (ptr_record == NULL) {
      printf("Out of memory!\nExit!\n");
      exit(0);
    }

    char username_argv[MAX_USERNAME];

    memset( username_argv, '\0', sizeof(username_argv) );

    if (strlen(argv[2]) > 12 ) {
      printf("Maximum characters for Nickname: %i\nPlease try again!\n", MAX_USERNAME);
      exit(0);
    }

    strcpy( username_argv, argv[1] );

    strncpy( (*ptr_record).username, username_argv, sizeof(username_argv) );

    printf("Username pointer: %s\n", (*ptr_record).username);

    do {
      printf("Please enter your MSG: \n");
      scanf ("%s", (*ptr_record).msg);
      printf("User MSG: %s\n", (*ptr_record).msg);
      //} while ((strcmp((*ptr_record).msg,"exit") != 0) || (strcmp((*ptr_record).msg, "quit") != 0));
      //} while (strcmp((*ptr_record).msg, "exit") || strcmp((*ptr_record).msg, "quit") != 0);
      //} while ((strcmp((*ptr_record).msg,"exit")) || (strcmp((*ptr_record).msg, "quit")) != 0);
      //} while ((*ptr_record).msg != "quit" || (*ptr_record).msg != "exit");
    } while (((*ptr_record).msg != exit) || ((*ptr_record).msg != ));

    free(ptr_record);

    return 0;
  } /* End of else */
} /* End of main() */

我正在尝试一段时间-当用户键入“退出”或“退出”时,do循环退出。由于某种我无法理解的原因,我根本无法实现。如果我应用以下条件之一...

c loops do-while
4个回答
7
投票

尝试:


3
投票

[这不起作用,因为您要执行的操作是DO循环WHILE字符串不同于"exit" AND字符串不同于"quit"


1
投票

示例中的所有行都使用逻辑OR运算符||来测试这两个条件。您是否尝试过逻辑AND运算符&&?


1
投票

尝试一下。您应该使用&&运算符,因为两个条件都必须为真才能继续。

© www.soinside.com 2019 - 2024. All rights reserved.