治愈罗小黑 发表于 2022-7-15 21:10:47

c语言有关二维数组的课后作业程序运行结果错误

要求:
1.输入一个英文句子,你的程序将这个字符串按空格进行分割,返回由单词组成的二维数组。
2.分割后的结果存放在 result 二维数组中,这个二维数组的尺寸是根据用户输入的单词长度而定的。
3.不论是一个空格还是多个空格,你的程序都能够正确识别出单词来。
如:



我编写的程序代码:
#include<stdio.h>

int main()
{
        char a;//存放输入的字符串
        int ch;
        int i=0,j=0;
        int flag=0;
        int row;
        int max=0;
       
        printf("请输入一个英文句子:");
       
        while((ch=getchar())!='\n');
        {
                if(ch!=' ')//只要输入的字符不是空格,字符就会被存放在a数组中
                {
                        a=ch;//i为正在输入句子的第i个单词,j为该单词的第j个字母
                        max=max>j?max:j;//记录最长单词的长度
                        flag=1;//flag没有置0就说明还在输入第i个单词
                }
               
                if(flag&&(ch==' '))//表示第i个单词输入完毕
                {
                        a='\0';
                        j=0;//准备记录下一个单词的长度
                        i++;
                        flag=0;//防止连续输入两个空格导致i++
                }
        }
       
        row=i-1;//记录输入的单词数量
       
        char result;//用来存放分割后的字符串
       
        for(i=0;i<row;i++)
        {
                for(j=0;j<max;j++)
                {
                        result=a;
                }
        }
       
        printf("分割结果已存放到result[%d][%d]的二维数组中...\n",row,max);
       
        printf("现在依次打印每个单词:");
       
        for(i=0;i<row;i++)
        {
                printf("%s\n",result);
        }

        return 0;
}

无论输入什么内容,运行结果都是这样的:


求问是代码哪里写错了{:10_266:}

qiuyouzhi 发表于 2022-7-15 21:53:26

flag=1;//flag没有置0就说明还在输入第i个单词
if(flag&&(ch==' '))//表示第i个单词输入完毕
这个逻辑是不是不太通?

治愈罗小黑 发表于 2022-7-15 22:34:02

本帖最后由 治愈罗小黑 于 2022-7-15 22:58 编辑

qiuyouzhi 发表于 2022-7-15 21:53
这个逻辑是不是不太通?

代码属于这一段里面的:
while((ch=getchar())!='\n');
      {
                if(ch!=' ')//只要输入的字符不是空格,字符就会被存放在a数组中
                {
                        a=ch;//i为正在输入句子的第i个单词,j为该单词的第j个字母
                        max=max>j?max:j;//记录最长单词的长度
                        flag=1;//flag没有置0就说明还在输入第i个单词
                }
               
                if(flag&&(ch==' '))//表示第i个单词输入完毕
                {
                        a='\0';
                        j=0;//准备记录下一个单词的长度
                        i++;
                        flag=0;//防止连续输入两个空格导致i++
                }
      }
比如我输入ilove(中间有两个空格),首先判断”i“,它不等于空格,就存在a里面,j=1,max=1,flag=1。
然后就判断第一个” “了,它等于空格,所以a=’0‘,j=0,i=1,flag=0。
然后就判断第二个” “了,这个时候因为flag=0,所以在这一次的while循环中,什么都没做。(也就是说通过flag来使得多次输入空格的效果和输入一次空格的效果是一样的)
接着就是”l“,不等于空格,就存在a里面,j=1,max=1,flag=1。
然后是”o“,不等于空格,就存在a里面,j=2,max=2,flag=1。
接下来的就可以类推了{:10_254:}

jackz007 发表于 2022-7-15 23:48:25

      为什么一定要放入二维数组?,一维数组外加一维指针数组效率更高!
#include <stdio.h>

int main(void)
{
      char c , s , * p                      ;
      int f , i , j                                    ;
      for(f = i = j = 0 ; (c = getchar()) != '\n' ; ) {
                if(c == ' ' || c == '\t') {
                        if(f) {
                              s = '\0'         ;
                              f = 0                  ;
                        }
                } else {
                        if(! f) {
                              p = & s         ;
                              f = 1                  ;
                        }
                        s = c                      ;
                }
      }
      if(f) s = '\0'                              ;
      for(i = 0 ; i < j ; i ++) printf("%s\n" , p);
}
      编译、运行实况:
D:\\C>g++ -o x x.c

D:\\C>x
    I         love                FishC.com!
I
love
FishC.com!

D:\\C>

治愈罗小黑 发表于 2022-7-16 08:19:50

jackz007 发表于 2022-7-15 23:48
为什么一定要放入二维数组?,一维数组外加一维指针数组效率更高!

      编译、运行实况:

学到了,谢谢{:10_297:}
页: [1]
查看完整版本: c语言有关二维数组的课后作业程序运行结果错误