请教前辈、高手一个循环的小问题,新人求指教

x326747278 2013-04-01 11:28:13
#include<iostream>

int main()
{
using namespace std;
char words[80][20];//二维数组
cout<<"Enter words (q to quit):";
int i=0;
do
{
cin>>words[i];
i++;
}while(!(words[i][0]=='q'&&words[i][1]=='\0'));//读取输入的单词,直到只输入q为止

int count1=0,count2=0,others=0;
for(int j=0;j<i-1;j++)
{
if(isalpha(words[j][0]))//判断单词是否以字母开头
switch(words[j][0])
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u': count1++;//统计元音字母开头的单词数量
break;
default: count2++;//统计辅音字母开头的单词数量
break;
}
else
others++;//统计以其他字符开头的单词数量
}
cout<<count1<<" words beginning with vowels\n";
cout<<count2<<" words beginning with consonants\n";
cout<<others<<" others \n";//输出各类单词的数量
return 0;
}


写了这个程序好像无法跳出那个do while循环,不知道测试条件的问题在哪里,又或是我的二维数组用得不对?

求帮帮忙,感激不尽
...全文
131 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
x326747278 2013-04-03
  • 打赏
  • 举报
回复
引用 3 楼 seuduck 的回复:
LS正解 因为i++,使你每次判断的都是下一行数组,跟预期不符
嗯,已经改过来了,谢谢了哈,回复晚了,不好意思。
x326747278 2013-04-03
  • 打赏
  • 举报
回复
引用 2 楼 tonforce 的回复:
C/C++ code?123456789char words[80][20] = {0};//二维数组 初始化一下下...do{ cin>>words[i]; // 接收一个字符 i++; // i++, 所以下面的while语句里就得i-1才能判断刚才输入的字符是不是‘q’}while( !(words[i-1][0] == ……
谢谢了,按照你这样改成words[i-1][0]是可以的,不好意思,回复有些晚了。
x326747278 2013-04-03
  • 打赏
  • 举报
回复
引用 1 楼 zyaiwx 的回复:
char words[80][20];//二维数组 cout<<"Enter words (q to quit):"; int i=0; do { cin>>words[i]; i++; }while(!(words[i][0]=='q'&&words[i][1]=='\0'));//读取输入的单词,直到只输入q为止 这段程序,首先你的二维……
谢谢了,已经把程序改正了,不好意思,回复有些晚了。
赵4老师 2013-04-02
  • 打赏
  • 举报
回复
不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) { if (条件1) break; //... if (条件2) continue; //... if (条件3) return; //... } 因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。 典型如: 下面两段的语义都是当文件未结束时读字符 whlie (!feof(f)) { a=fgetc(f); //... b=fgetc(f);//可能此时已经feof了! //... } 而这样写就没有问题: whlie (1) { a=fgetc(f); if (feof(f)) break; //... b=fgetc(f); if (feof(f)) break; //... } 类似的例子还可以举很多。
seuduck 2013-04-02
  • 打赏
  • 举报
回复
LS正解 因为i++,使你每次判断的都是下一行数组,跟预期不符
tonforce 2013-04-02
  • 打赏
  • 举报
回复

char words[80][20] = {0};//二维数组 初始化一下下
...
do
{
     cin>>words[i];   // 接收一个字符
     i++;             // i++, 所以下面的while语句里就得i-1才能判断刚才输入的字符是不是‘q’
}
while( !(words[i-1][0] == 'q' && words[i-1][1] == '\0') );//读取输入的单词,直到只输入q为止
// 没有仔细研究你代码的业务逻辑,所以不敢保证words[i-1]是否符合你的业务逻辑,你可以更改符合你业务逻辑的表达式。
zybjtu 2013-04-01
  • 打赏
  • 举报
回复
char words[80][20];//二维数组 cout<<"Enter words (q to quit):"; int i=0; do { cin>>words[i]; i++; }while(!(words[i][0]=='q'&&words[i][1]=='\0'));//读取输入的单词,直到只输入q为止 这段程序,首先你的二维数组应该初始化,也就是说words[80][20]={'\0'}。这样数组中的值才不是随即值。 跳不出循环,是因为你每次输入一个q,然后i++,判断的是下一行的数组,而此时显然不会是‘q’。故跳不出来。 可以把i++放前面,或者咋样的

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧