当前位置:编程学习 > C/C++ >>

熟悉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++编译问题

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,