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:} flag=1;//flag没有置0就说明还在输入第i个单词
if(flag&&(ch==' '))//表示第i个单词输入完毕
这个逻辑是不是不太通? 本帖最后由 治愈罗小黑 于 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:} 为什么一定要放入二维数组?,一维数组外加一维指针数组效率更高!
#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> jackz007 发表于 2022-7-15 23:48
为什么一定要放入二维数组?,一维数组外加一维指针数组效率更高!
编译、运行实况:
学到了,谢谢{:10_297:}
页:
[1]