C 字符串do while中出现错误

C 字符串do while中出现错误,c,C,为什么这不起作用?str永远不会等于exit,因为您正在比较内存中两个不同部分的地址。您可能希望比较字符串的内容,其中有一个函数strcmp。如上所述,使用头文件中的strcmp char str[6]; do { printf("Enter the string you wanna check:"); scanf("%s", str); } while(str != "exit"); exit是编译器在数据段的某个地址生成的字符[5]。这个地址与str的地址完全不同,因为

为什么这不起作用?

str永远不会等于exit,因为您正在比较内存中两个不同部分的地址。您可能希望比较字符串的内容,其中有一个函数strcmp。

如上所述,使用头文件中的strcmp

char str[6];

do
{
    printf("Enter the string you wanna check:");
    scanf("%s", str);

}
while(str != "exit");
exit是编译器在数据段的某个地址生成的字符[5]。这个地址与str的地址完全不同,因为两个不同的对象不能在内存中占据相同的位置

那个!=char[]类型表达式之间的运算符比较两个指针。这两个指针是exit的地址和str的地址,正如我已经解释过的,它们永远不会相等

那么,表达式str!=退出将永远不会计算为true。这就引出了另一个问题:编译器应该发出警告,警告此条件始终为false。这意味着您正在尝试无墙编程。不要这样做,你永远不会走得很远。始终使用最高警告级别,当您看到警告时,始终修复它们

要更正此问题,请按照建议执行,并使用strcmp比较字符串。

尝试:

char str[6];

do {
    printf("Enter the string you wanna check:");
    scanf("%s", str);
} while(!strcmp(str, "exit"));
简单的回答是:它不起作用,因为只要strcmp的返回值不是0,就必须使用strcmpstr、exit来比较字符串和循环

答案很长:这个小代码片段中还有更多问题:

用于读取单词的数组非常短,并且不限制scanf可能存储的字符数。任何超过5个非空格字符的用户输入都将导致未定义的行为

您不检查scanf的返回值。文件过早结束(如重定向空文件的输入)将导致无限循环

以下是如何以更安全的方式编写代码:

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

int main() {

    char str[6];

    do
    {
        printf("Enter the string you wanna check:");
        scanf("%s", str);

    }
    while(strcmp(str, "exit") != 0);

    return 0;
}

定义不工作当用户进入退出时,循环不会中断。您不是在比较字符串,而是指向char的指针。如前所述,使用strcmp。欢迎使用StackOverflow!检查
#include <stdio.h>

int main(void) {
    char str[80];

    for (;;) {
        printf("Enter the string you wanna check:");
        if (scanf("%79s", str) != 1 || strcmp(str, "exit") == 0)
            break;
    }
    return 0;
}