gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:16:27 25 4
gpt4 key购买 nike

我正在尝试制作一个 while - do 循环,以便在用户键入“exit”或“quit”时退出。由于某种我无法理解的原因,我根本无法实现它。如果我分别应用这些条件之一,它就可以正常工作,但我需要同时满足这两个条件。

我在网上搜索了一下,发现了几个不同编程语言的例子,例如,(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() */

最佳答案

尝试:

} while ((strcmp((*ptr_record).msg,"exit") != 0) &&
(strcmp((*ptr_record).msg,"quit") != 0));

你想要NOT (A OR B),而不是NOT A OR NOT B。记住De Morgan's laws也就是说 NOT (A OR B)NOT A AND NOT B 相同。

使用 || 是错误的,因为您总是至少有一个条件(|| 的操作数)或另一个为真。

假设您的字符串是 "exit" 然后:

(strcmp((*ptr_record).msg,"exit") != 0)

是假的

但是

(strcmp((*ptr_record).msg,"quit") != 0)

是真的。

表示0 || 1 产生 1"quit" 字符串(1 || 0 产生 1)相同(相反)。对于其他字符串,|| 的操作数都是11 || 1 产生 1

关于c - do - while 在 C 中有多个条件的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25049008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com