|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
遇到一个很弱智的问题,应该是很久以前就学过的。可是现在找不到原因了,求助。
题目要求屏幕录入一个英文句子,将句子拆分成一个个单独的单词。第一步存入数组,一开始还可以存入,可是代码改来改去,现在不能存入了,求助什么原因?感觉应该是某一个很简单的点,但是就是找不到呀。
- #include<stdio.h>
- int main()
- {
- char a[1024];
- char ch;
- int m=1,n=0;
- int i=0,j=1,k,p;
- printf("请输入一个英文句子:");
- while((ch=getchar()!='\n'))
- {
- if(ch!=' ')
- {
- a[i]=ch; //将屏幕录入的字符存入数组,现在问题就卡在了这里,
- i++; //移动数组位置
- j++; //计算单词长度
- }
- else
- {
- a[i]='\0';//将空格更换为结束符存储
- i++;
- j=1; //新一个单词计数
- m++; //新一个单词开始位置
- }
- if(j>n)n=j;
- }
- char result[m][n]; //定义题目要求的可变数组
- for(i=0;i<20;i++)printf("a[%d]=%c\n",i,a[i]); //临时检查录入结果,运行时发现数组里并没有内容
- /*
- //将存入值转存到题目要求的数组
- i=0;
- for(k=0;k<m;k++)
- {
- for(p=0;p<n;p++)
- {
- result[k][p]=a[i];
- i++;
- if(result[k][p]='\0')break;
- }
- }
- printf("分割结果已存放到result[%d][%d]的二维数组中。。。。。\n",m,n);
- //结果数组格式输出
- printf("现在依次打印每个单词:\n");
- for(k=0;k<m;k++)printf("%s",result[k]);
- */
- return 0;
- }
复制代码
运行结果
本帖最后由 jackz007 于 2022-10-6 11:58 编辑
第11行应该是:
- while((ch=getchar())!='\n')
复制代码
这是我写的代码版本,谨供楼主参考
- #include<stdio.h>
- int main()
- {
- char ch , a[1024] ;
- int i , j , k , m , n ;
- printf("请输入一个英文句子:") ;
- for(i = m = 0 , j = n = 1 ; (ch = getchar()) != '\n' ;) {
- if(ch != ' ') {
- if(j == 1) m ++ ;
- a[i ++] = ch ;
- a[i] = '\0' ;
- j ++ ;
- if(j > n) n = j ;
- } else {
- if(j > 1) { // 只有字符串之间的单个空格有效
- j = 1 ;
- i ++ ; // 保护上个字符串末尾的 '\0'
- }
- }
- }
- char result[m][n] ;
- for(i = k = 0 ; i < m ; i ++) for(j = 0 ; (result[i][j ++] = a[k ++]) ;) ; // 这里绝不可以只是简单地按照每个字符串 n 个字符进行分割和复制
- printf("分割结果已存放到result[%d][%d]的二维数组中。。。。。\n" , m , n) ;
- printf("现在依次打印每个单词:\n") ;
- for(k = 0 ; k < m ; k ++) printf("%s\n" , result[k]) ;
- }
复制代码
编译、运行实况:
- D:\[00.Exerciese.2022]\C>g++ -o x x.c
- D:\[00.Exerciese.2022]\C>x
- 请输入一个英文句子: I am a disco danncer!
- 分割结果已存放到result[5][9]的二维数组中。。。。。
- 现在依次打印每个单词:
- I
- am
- a
- disco
- danncer!
- D:\[00.Exerciese.2022]\C>
复制代码
|
|