C 字符串do while中出现错误
为什么这不起作用?str永远不会等于exit,因为您正在比较内存中两个不同部分的地址。您可能希望比较字符串的内容,其中有一个函数strcmp。如上所述,使用头文件中的strcmpC 字符串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的地址完全不同,因为
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;
}