熟悉C++的进。。。
这是一个简单的英语单词复习程序:流程大致:1;选择复习汉语意思还是英语原文。2,(若选复习英语原文)会先显示汉语意思,这时需要使用的人输入相对应的英语单词,若输错重新输入,并记忆输错的单词。输对跳过。输“;’也跳过。 等全部复习完后,以上面的方式重新把输错的单词复习一遍。 。。。。。。。。。。。。。。问题就在这里:复习‘曾经输入错误的单词’时,程序卡住了?????求解!!!!!!!!!!!!!!!!!!!
#include<iostream.h>
#include<string.h>
int my(int,char [],char []);
char wrongc[50][90],wronge[50][90];int wronga=0;//**************
void main()
{int choice,n;
cout<<"要复习汉语意思请输入数字’1’,复习英语原文请输入任意数字"<<endl;
cin>>choice;
cout<<"需要提示请输入“;”"<<endl;
for(n=0;n!=10;)
{char a[50]="pipe/paip/n.";
char b[50]="n.管,导管";
n=my(choice,a,b);}
for(int g=0;g<wronga;g++)//。。。。。。。。。。。这儿以下就开始出错了!!!!!!!!!!
for(n=0;n!=10;)
n=my(choice,wronge[g],wrongc[g]);
}
int my(int choicex,char english[],char chinese[])
{
char compare[50];char a,b;int m,e;
for(int n=0; a!='/';n++)
a=english[n];
n-=1;
//复习汉语意思!
if(choicex==1)
{
cout<<english;
cin>>b;
if(b==';')
{cout<<chinese<<endl;
return 10;}
}
//复习英语原文!
else
{
cout<<chinese;
cin>>compare;
if(compare[0]==';')
{cout<<english<<endl;
return 10;}
else
{e=strncmp(english,compare,n);
if(e==0)
{cout<<english<<endl;
return 10;}
else
{for(m=0;wrongc[wronga][m]!='\0';m++)
wrongc[wronga][m]=chinese[m];
for(int m=0;wronge[wronga][m]!='\0';m++)
wronge[wronga][m]=english[m];
wronga++;}
}
}
}
追问:真服了U 了,太详细了!!!!我这代码只是自己用的,没想着让别人看懂,变量有的根本就没用着!!你QQ号多少啊,以后有问题还得向大侠请教???
答案:你的代码是标准的C++吗?
代码风格有点不好,有的花括号不仔细看,还真不知道它与哪个花括号匹配。
函数和变量的命名需要规范点,尽量做到看其名,知其意,建议用英文单词或单词缩写。
你这改代码还差不多,不像有的人和爷似的,什么都不做,懒得想,直接发个题目,求人给他答案。
建议你多写点注释,还好你这是简单的代码,复杂点的,没注释,还真不知道它是干什么的。
g++编译,你的代码有以下警告+错误:
gcc -Wall -O2 -g -c "temp_p.cpp"
temp_p.cpp: 在函数‘int my(int, char*, char*)’中:
temp_p.cpp:11:2: 错误: 在 ISO‘for’作用域中,‘n’的名称查找有变化 [-fpermissive]
temp_p.cpp:11:2: 附注: (如果您使用‘-fpermissive’G++ 会接受您的代码)
temp_p.cpp:15:3: 错误: ‘cout’在此作用域中尚未声明
temp_p.cpp:15:3: 附注: 建议的替代:
/usr/include/c++/4.6/iostream:62:18: 附注: ‘std::cout’
temp_p.cpp:16:3: 错误: ‘cin’在此作用域中尚未声明
temp_p.cpp:16:3: 附注: 建议的替代:
/usr/include/c++/4.6/iostream:61:18: 附注: ‘std::cin’
temp_p.cpp:20:19: 错误: ‘endl’在此作用域中尚未声明
temp_p.cpp:20:19: 附注: 建议的替代:
/usr/include/c++/4.6/ostream:543:5: 附注: ‘std::endl’
temp_p.cpp:27:3: 错误: ‘cout’在此作用域中尚未声明
temp_p.cpp:27:3: 附注: 建议的替代:
/usr/include/c++/4.6/iostream:62:18: 附注: ‘std::cout’
temp_p.cpp:28:3: 错误: ‘cin’在此作用域中尚未声明
temp_p.cpp:28:3: 附注: 建议的替代:
/usr/include/c++/4.6/iostream:61:18: 附注: ‘std::cin’
temp_p.cpp:31:19: 错误: ‘endl’在此作用域中尚未声明
temp_p.cpp:31:19: 附注: 建议的替代:
/usr/include/c++/4.6/ostream:543:5: 附注: ‘std::endl’
temp_p.cpp:39:20: 错误: ‘endl’在此作用域中尚未声明
temp_p.cpp:39:20: 附注: 建议的替代:
/usr/include/c++/4.6/ostream:543:5: 附注: ‘std::endl’
temp_p.cpp: 在函数‘int main()’中:
temp_p.cpp:57:2: 错误: ‘cout’在此作用域中尚未声明
temp_p.cpp:57:2: 附注: 建议的替代:
/usr/include/c++/4.6/iostream:62:18: 附注: ‘std::cout’
temp_p.cpp:57:69: 错误: ‘endl’在此作用域中尚未声明
temp_p.cpp:57:69: 附注: 建议的替代:
/usr/include/c++/4.6/ostream:543:5: 附注: ‘std::endl’
temp_p.cpp:58:2: 错误: ‘cin’在此作用域中尚未声明
temp_p.cpp:58:2: 附注: 建议的替代:
/usr/include/c++/4.6/iostream:61:18: 附注: ‘std::cin’
temp_p.cpp: 在函数‘int my(int, char*, char*)’中:
temp_p.cpp:52:1: 警告: 在有返回值的函数中,控制流程到达函数尾 [-Wreturn-type]
编译失败。
这是纠正后的代码:
#include <iostream>
#include <string.h>
using namespace std; //使用命名空间,std是标准(standard)的缩写
//下面的二维字符串用于保存输错的单词
char wrongc[50][90],wronge[50][90];
int wronga=0;//**************
int my(int choicex,char english[],char chinese[])
{
char compare[50];
char b;
//你这是计算字符串长度吗?
//没必要,而且,你只计算一次,
//后面的strncmp就一直按这n的长度来对比了,
//那结果不是一直是输入错误吗?
//for(n=0; a!='/';n++)
// a=english[n];
//n-=1;
if(choicex==1)
{//如果选择的是1,也就是选择复习汉语
cout<<english<<endl;;
cin>>b;
if(b==';')
{
cout<<chinese<<endl;
return 10;
}
}
else
{//否则,选择的是复习英语
cout<<chinese<<endl;
cin>>compare;
if(compare[0]==';')
{//如果输入的是";"
cout<<"答案是:"<<english<<endl;
return 10;
}
else
{//否则,对比字符串
//直接用strcmp就可以了,也没必要用e来保存结果
//由于你的n的值一直是第一次得到的值,
//如果一次输的单词短了,
//那么后面就算你输入正确的单词也是同样的结果,一直循环
//e=strncmp(english,compare,n);
if(strcmp(english, compare) == 0)
{//如果完全匹配
cout<<"答案是:"<<english<<"正确!"<<endl;
return 10;
}
else
{//否则,记录输错的内容
cout<<"答案不正确!"<<endl;
//字符串拷贝,右边的复制到左边的
strcpy(wrongc[wronga], chinese);
//下面就不需要了
//for(m=0;wrongc[wronga][m]!='\0';m++)
// wrongc[wronga][m]=chinese[m];
//同上
strcpy(wronge[wronga], english);
//for(m=0;wronge[wronga][m]!='\0';m++)
// wronge[wronga][m]=english[m];
wronga++;//累计错误次数
}
}
}
return 0;
}
int main()
{
int choice,n;
cout<<"要复习汉语意思请输入数字’1’,复习英语原文请输入任意数字"<<endl;
cin>>choice;
cout<<"需要提示请输入“;”"<<endl;
cout<<"复习开始!"<<endl;
//复习单词
for(n=0;n!=10;)
{
char a[50]="pipe/paip/n.";
char b[50]="n.管,导管";
n=my(choice,a,b);
}
cout<<"开始复习之前输入错误的单词!"<<endl;
//复习刚刚输入错误的单词
for(int g=0; g<wronga; g++)
for(n=0; n!=10; )
n=my(choice, wronge[g], wrongc[g]);
}
不采纳的话,还真对不起我了。有问题再追问。
我对计算机很头痛的
布之达
上一个:C++怎么读?
下一个:C++编译问题