注册 登录
编程论坛 C++教室

错在哪里,看看!

Soul寂 发布于 2008-10-26 21:40, 1061 次点击
这是一个简单的数组程序:
我设置了两个数组name[50]和num[50]分别用来存放学生的 姓名学号
用void input_data()和void search(string x)两个函数分别用来  获取数据 和 数据查询
程序代码:
#include <iostream>
#include <string>
using namespace std;
int n;
string name[50],num[50];
int main()
{
    void input_data();
    void search(string);
    string find_name;
    cout<<"please input the number of class:"<<endl;
    cin>>n;
    input_data();
    cout<<"please input name you  want:";
    cin>>find_name;
    search(find_name);
    return 0;
}

void input_data()
{
    int i;
    for(i=0;i<n;i++)
    {
        cout<<"please input name and number of student"<<i+1<<": ";
        cin>>name[i]>>num[i];
    }
}
void search(string x)
{
    int i;
    bool flag=false;
    for(i=0;i<n;i++)
    {
        if(name[i]==x)
            cout<<name[i]<<"  has been found,his number is:"<<num[i]<<endl;
        flag=true;
                  break;
    }
    if(flag==false)
        cout<<"can not find name"<<endl;
}


问题就处在break上,不管我输入什么,它总是查询不到!如图:连"can not find name"都不输出!
只有本站会员才能查看附件,请 登录

这说明程序自动跳出了,于是我  注释了break
程序可以查询:
只有本站会员才能查看附件,请 登录


但是我如果查询了我没有输入的数据,程序不输出:  "can not find name"如图:
只有本站会员才能查看附件,请 登录



能不能告诉我这是为什么呢?万分感谢!

[[it] 本帖最后由 Soul寂 于 2008-10-26 21:48 编辑 [/it]]
10 回复
#2
Soul寂2008-10-26 21:44
为什么这里不能有break呢?
#3
zxwangyun2008-10-26 21:55
不会吧!我把search函数改了下,正常:
void search(string x)
{
    int i;
    bool flag=false;
    for(i=0;i<n;i++)
    {
        if(name[i]==x){
            cout<<name[i]<<"  has been found,his number is:"<<num[i]<<endl;
            flag=true;
        }
         break;
    }
    if(!flag)
        cout<<"can not find name"<<endl;
}
#4
newyj2008-10-26 21:58
if(name[i]==x)
{
  cout<<name[i]<<"  has been found,his number is:"<<num[i]<<endl;
  flag=true;
  break;
}
#5
zxwangyun2008-10-26 22:04
void search(string x)
{
    int i;
    bool flag=false;
    for(i=0;i<n;i++)
    {
        if(name[i]==x){
            cout<<name[i]<<"  has been found,his number is:"<<num[i]<<endl;
            flag=true;
            break;
       }
    }
    if(!flag)
        cout<<"can not find name"<<endl;
}
#6
zxwangyun2008-10-26 22:04
刚打错了,不好意思啦!
#7
Soul寂2008-10-26 22:06
回复3L:
你好像改错了吧!你看:
只有本站会员才能查看附件,请 登录

b ,本来存在的,看是确查询不到!!!
#8
Soul寂2008-10-26 22:16
回复 6# zxwangyun 的帖子
这是我的函数:
void search(string x)
{
    int i;
    bool flag=false;
    for(i=0;i<n;i++)
    {
        if(name[i]==x)
           cout<<name[i]<<"  has been found,his number is:"<<num[i]<<endl;
           flag=true;
           break;
    }
    if(flag==false)
        cout<<"can not find name"<<endl;
}
这是你的函数:
void search(string x)
{
    int i;
    bool flag=false;
    for(i=0;i<n;i++)
    {
        if(name[i]==x){
            cout<<name[i]<<"  has been found,his number is:"<<num[i]<<endl;
            flag=true;
            break;
       }
    }
    if(!flag)
        cout<<"can not find name"<<endl;
}
好像就是把if(flag==false)改成if(!flag),  能告诉我为什么这样改? 万分感谢!
#9
Soul寂2008-10-26 22:33
晕!
知道错误了,我居然少了一个括号!!!真实粗心啊!!!

谢谢帮助我的兄弟!
#10
keanbin2008-10-26 22:51
[bo][un]Soul寂[/un] 在 2008-10-26 22:16 的发言:[/bo]

这是我的函数:
void search(string x)
{
    int i;
    bool flag=false;
    for(i=0;i


你的第一个程序和第二个程序的if语句不同啊  第一个没有花挂号。
我觉得不是if(flag==false)的问题,因为我把你的程序编译了一下,只是把花括号加上去就可以了。代码如下:
#include <iostream>
#include <string>
using namespace std;
int n;
string name[50],num[50];
int main()
{
    void input_data();
    void search(string);
    string find_name;
    cout<<"please input the number of class:"<<endl;
    cin>>n;
    input_data();
    cout<<"please input name you  want:";
    cin>>find_name;
    search(find_name);
    return 0;
}

void input_data()
{
    int i;
    for(i=0;i<n;i++)
    {
        cout<<"please input name and number of student"<<i+1<<": ";
        cin>>name[i]>>num[i];
    }
}
void search(string x)
{
    int i;
    bool flag=false;
    for(i=0;i<n;i++)
    {
        if(name[i]==x)
        {                                        //加的花括号
            cout<<name[i]<<"  has been found,his number is:"<<num[i]<<endl;
            flag=true;        
            break;
        }                                         //加的花括号
    }
    if(flag==false)
        cout<<"can not find name"<<endl;
}
运行的结果见附件:
#11
sss49992008-10-27 10:42
我 调试过l
#include <iostream>
#include <string>
using namespace std;
int n=2;
string name[50],num[50];
    void input_data();
    void search(string);
int main()
{
   
    string find_name;
    cout<<"please input the number of class:"<<endl;
    cin>>n;
  
    input_data();
    cout<<"please input name you  want:";
    cin>>find_name;
    search(find_name);
    return 0;
}

void   input_data()
{
    int i;
    for(i=0;i<n;i++)
    {
        cout<<"please input name and number of student"<<i+1<<": ";
        cin>>name[i]>>num[i];
    }
   
}
void search(string x)
{
    int i;
    bool flag=false;
    for(i=0;i<n;i++)
    {
        if(name[i]==x)
        {   cout<<name[i]<<"  has been found,his number is:"<<num[i]<<endl;
        flag=true;
        break;}
    }
    if(flag==false)
        cout<<"can not find name"<<endl;
}[qq]597451859[/qq]
1