求助一个while语句
for(i = 0; i < 1024; i++){
char *b = en;
char *a = ch;
printf("%s :",ch);
scanf("%s",a);
do
{
printf("%s :",ch);
scanf("%s",a);
}while(*a != *b);
if(ch=="end")
{
printf("程序结束!\n");
system("pause");
}
}
为啥这个while语句成立的时候整个fou语句都直接终止了。
有点摸不着头脑, 你看你while循环后还有代码吗?
有,且只有一个判断了
程序肯定就结束了啊
还有,把代码发全 qiuyouzhi 发表于 2020-3-14 20:59
你看你while循环后还有代码吗?
有,且只有一个判断了
程序肯定就结束了啊
#include <stdio.h>
#define MAX 1024
int main(void)
{
char *ch[] = {"彩虹","工厂","end"};
char *en = {"rainbow","factory","end"};
int i,n = 0;
for(i = 0; i < 1024; i++)
{
char *b = en;
char *a = ch;
printf("%s :",ch);
scanf("%s",a);
do
{
printf("%s :",ch);
scanf("%s",a);
}while(*a != *b);
if(ch=="end")
{
printf("程序结束!\n");
system("pause");
}
}
return 0;
} qiuyouzhi 发表于 2020-3-14 20:59
你看你while循环后还有代码吗?
有,且只有一个判断了
程序肯定就结束了啊
如果while写在for语句里面,while执行完之后,是会直接结束整个for语句吗? 言覃Jack 发表于 2020-3-14 21:05
如果while写在for语句里面,while执行完之后,是会直接结束整个for语句吗?
不是,可你后面没有语句啊 qiuyouzhi 发表于 2020-3-14 21:07
不是,可你后面没有语句啊
do while(*a != *b),while括号里面的是结束条件,执行完之后,不是应该执行i++,然后继续循环执行下面的语句 言覃Jack 发表于 2020-3-14 21:10
do while(*a != *b),while括号里面的是结束条件,执行完之后,不是应该执行i++,然后继续循环执行下面的 ...
能给出一套输入用例吗? qiuyouzhi 发表于 2020-3-14 21:12
能给出一套输入用例吗?
就是加入先打印出ch 的彩虹: 然后用户输入,如果等于en里面的rainbow,如果不符合就继续打印彩虹
言覃Jack 发表于 2020-3-14 21:14
就是加入先打印出ch 的彩虹: 然后用户输入,如果等于en里面的rainbow,如果不符合就继续打印彩虹
可是你这程序也没先打印彩虹啊 for语句在执行dowhile 之前先打印了一次彩虹,然后scanf,之后do while 就判断是否正确 本帖最后由 就是要努力呀 于 2020-3-15 12:22 编辑
你的代码问题很多,全是警告和错误,你的编译器没有提醒你吗#include <stdio.h>
#define MAX 1024
int main(void)
{
char *ch[] = {"彩虹","工厂","end"};
char *en = {"rainbow","factory","end"}; //en 你的这个数组指针里面有128个指针吗
int i,n = 0;
for(i = 0; i < 1024; i++)
{
char *b = en; 错误用法,指针指向数组指针应该用二重指针 光是这里就是错误,编译都不通过char **b = en;
char *a = ch; 同上
printf("%s :",ch); 你要打印ch中的哪个值,ch有三个值,你到底要打印哪一个,如果你打印彩虹就printf("%s", *ch); 这些错误你自己没有发现吗,你的printf根本就没有打印ch的值
scanf("%s",a); 错误用法,不能用scanf给char 型的指针赋值,你可以在初始化char型指针的时候给它赋值,但不能用scnaf给它让用户输入值,要用就用字符数组
do
{
printf("%s :",ch); 同上
scanf("%s",a); 同上
}while(*a != *b);
if(ch=="end")
{
printf("程序结束!\n");
system("pause");
}
}
return 0;
}
综上你把代码的数组指针换成数组就ok了 本帖最后由 言覃Jack 于 2020-3-15 13:14 编辑
就是要努力呀 发表于 2020-3-15 12:20
你的代码问题很多,全是警告和错误,你的编译器没有提醒你吗
综上你把代码的数组指针换成数组就ok了
#include <stdio.h>
#include <stdlib.h>
#define MAX 1024
int main(void)
{
char *ch[] = {"彩虹","工厂","end"};
char *en[] = {"rainbow","factory","end"};
int i,n = 0;
for(i = 0; i < MAX; i++)
{
char *b = en; //这里有en【i】 不知道为什么英文状态的【】 和里面的内容都显示不出来
char *a = ch; //这里有ch【i】
printf("%s :",ch); // 这里也有ch【i】但是复制之后不显示
scanf("%s",a);
do
{
printf("%s :",ch); // 这里也有ch【i】但是复制之后不显示
scanf("%s",a);
}while(*a != *b);
if(ch=="end")
{
printf("程序结束!\n");
system("pause");
}
}
return 0;
}
源代码是这样的,刚刚看了一眼,才发现复制有些地方少了,用的dev_C++编译器,没有任何提醒和报错,就是在执行do while 语句时,一旦俩者相等整个程序就结束了。其它环节都没有出现错误,就是for语句打印彩虹:如果用户输入错误,就继续输出彩虹:,假如输入正确了整个for语句都停止循环了,然后就程序结束了 本帖最后由 就是要努力呀 于 2020-3-15 16:07 编辑
1. scanf("%s",a); 错误用法,不能用scanf给char 型的指针赋值,你可以在初始化char型指针的时候给它赋值,但不能用scnaf给它让用户输入值,要用就用字符数组
2.字符串的对比不能用==号,应该使用<string.h>头文件里的strcmp函数
3.你把你的指针数组全部换成字符数组 #include <stdio.h>
#include <string.h>
#define MAX 1024
int main(void)
{
char ch = {"彩虹", "工厂", "end"};
char en = {"rainbow", "factory", "end"};
char astr;
int i;
for(i = 0; i < 3; i++)
{
do
{
printf("%s:", ch);
scanf("%s", astr);
getchar();
}
while(strcmp(astr, en));
if(!strcmp(ch, "end"))
{
printf("程序结束!\n");
break;
}
}
return 0;
} 就是要努力呀 发表于 2020-3-15 16:01
1. scanf("%s",a); 错误用法,不能用scanf给char 型的指针赋值,你可以在初始化char型指针的时候给它赋值, ...
懂了,懂了,之前在做密码的时候一直都是用==来比较俩个是否相等,现在突然想做个字符串的,也下意识的使用==来比较是否相等了。
页:
[1]