我试图做一个while-do循环退出当用户键入exit或退出时.由于某种原因,我无法理解我简单无法实现它.如果我单独应用其中一个条件它可以正常工作,但我需要同时具备这两个条件.
我在网上搜索,我发现了几个不同编程语言的例子,例如(PHP)Do-While循环多条件,(Python)如何进行while循环多条件,(C++)在do ... while循环中使用多个条件等但无论我遵循什么程序,我都能同时兼顾两种情况.
理想的解决方案是添加大写条件,但我可以在解决此问题后立即使用它.
也许一双新鲜的眼睛会看到我失踪的东西.
代码示例如下:
#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 memmory!\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() */"
Run Code Online (Sandbox Code Playgroud)
你试过了吗:
} while ((strcmp((*ptr_record).msg,"exit") != 0) &&
(strcmp((*ptr_record).msg,"quit") != 0));
Run Code Online (Sandbox Code Playgroud)
你想要的NOT (A OR B)
不是NOT A OR NOT B
.请记住De Morgan的法律,即与之NOT (A OR B)
相同NOT A AND NOT B
.
使用||
是错误的,因为您将始终至少有一个条件(操作数||
)或另一个条件为真.
想象一下你的字符串是"exit"
:
(strcmp((*ptr_record).msg,"exit") != 0)
Run Code Online (Sandbox Code Playgroud)
是假的
但
(strcmp((*ptr_record).msg,"quit") != 0)
Run Code Online (Sandbox Code Playgroud)
是真的.
这意味着0 || 1
哪个收益率 1
."quit"
字符串相同(相反)(1 || 0
产生1
).对于其他字符串,两个操作数都||
将是1
和1 || 1
yield 1
.