言覃Jack 发表于 2020-3-14 20:41:56

求助一个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语句都直接终止了。
有点摸不着头脑,

qiuyouzhi 发表于 2020-3-14 20:59:06

你看你while循环后还有代码吗?
有,且只有一个判断了
程序肯定就结束了啊
还有,把代码发全

言覃Jack 发表于 2020-3-14 21:03:56

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;
}

言覃Jack 发表于 2020-3-14 21:05:22

qiuyouzhi 发表于 2020-3-14 20:59
你看你while循环后还有代码吗?
有,且只有一个判断了
程序肯定就结束了啊


如果while写在for语句里面,while执行完之后,是会直接结束整个for语句吗?

qiuyouzhi 发表于 2020-3-14 21:07:27

言覃Jack 发表于 2020-3-14 21:05
如果while写在for语句里面,while执行完之后,是会直接结束整个for语句吗?

不是,可你后面没有语句啊

言覃Jack 发表于 2020-3-14 21:10:27

qiuyouzhi 发表于 2020-3-14 21:07
不是,可你后面没有语句啊

do while(*a != *b),while括号里面的是结束条件,执行完之后,不是应该执行i++,然后继续循环执行下面的语句

qiuyouzhi 发表于 2020-3-14 21:12:25

言覃Jack 发表于 2020-3-14 21:10
do while(*a != *b),while括号里面的是结束条件,执行完之后,不是应该执行i++,然后继续循环执行下面的 ...

能给出一套输入用例吗?

言覃Jack 发表于 2020-3-14 21:14:09

qiuyouzhi 发表于 2020-3-14 21:12
能给出一套输入用例吗?

就是加入先打印出ch 的彩虹: 然后用户输入,如果等于en里面的rainbow,如果不符合就继续打印彩虹

qiuyouzhi 发表于 2020-3-14 21:17:18

言覃Jack 发表于 2020-3-14 21:14
就是加入先打印出ch 的彩虹: 然后用户输入,如果等于en里面的rainbow,如果不符合就继续打印彩虹

可是你这程序也没先打印彩虹啊

言覃Jack 发表于 2020-3-14 21:19:59

for语句在执行dowhile 之前先打印了一次彩虹,然后scanf,之后do while 就判断是否正确

就是要努力呀 发表于 2020-3-15 12:20:17

本帖最后由 就是要努力呀 于 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 12:57:27

本帖最后由 言覃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:01:42

本帖最后由 就是要努力呀 于 2020-3-15 16:07 编辑

1. scanf("%s",a); 错误用法,不能用scanf给char 型的指针赋值,你可以在初始化char型指针的时候给它赋值,但不能用scnaf给它让用户输入值,要用就用字符数组
2.字符串的对比不能用==号,应该使用<string.h>头文件里的strcmp函数
3.你把你的指针数组全部换成字符数组

就是要努力呀 发表于 2020-3-15 16:04:58

#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;
}

言覃Jack 发表于 2020-3-15 17:32:12

就是要努力呀 发表于 2020-3-15 16:01
1. scanf("%s",a); 错误用法,不能用scanf给char 型的指针赋值,你可以在初始化char型指针的时候给它赋值, ...

懂了,懂了,之前在做密码的时候一直都是用==来比较俩个是否相等,现在突然想做个字符串的,也下意识的使用==来比较是否相等了。
页: [1]
查看完整版本: 求助一个while语句