0

我有一个包含学生姓名和卷号的 txt 文件。我想从他的文件中读取并显示一个特定的卷号。它只显示第一个卷号,但我想读取第二个人的卷号。

也就是说,如果我想读取“ss”的卷号,它显示的是第一人的卷号

该程序是

#include<iostream.h>
#include<conio.h>
#include<fstream.h>
#include<string.h>
#include<stdio.h>

void student_read()
{
    clrscr();
    char name[30], n[30], temp[30];
    int i, roll_no, code, count=0;

    ifstream fin("tt.txt",ios::in|ios::beg);
    if(!fin)
    {
        cout << "cannot open for read ";
        return;
    }
cout << "Enter the name of student" << "\n";
        cin >> n;

    while(fin >> name >> roll_no)
    {
        cout << roll_no << endl;
    }



    if(string[name] == string[n])
    {
        cout << "roll no" << "\n" << roll_no;
    }
    else
        cout << "Not found";
}

void main()
{
    clrscr();
    cout << "Students details is" << "\n";
    student_read();
    getch();
}

txt 文件包含以下数据:

苏拉夫 123 不锈钢 33

4

3 回答 3

3

您的文本文件中是否有每一行的结尾?你有sourav 123 ss 33orsourav 123\nss 33吗?这if(n[30]==name[30])仅比较字符串中的 1 个字符。

于 2013-10-22T06:09:33.720 回答
2

在输入要搜索的名称之前,您已经在输出文件中的内容。

重新排列您的陈述,如下所示:

cout<<"Enter the name of student"<<"\n";
cin>>n;
while(fin>>name>>roll_no)
{
    //...

此外,如果您只想输出一个名称和 roll_no,在您的循环中,您必须检查某种条件是否打印。目前,您的代码实际上应该打印文件中所有行的 roll_no,有时可能会打印最后一行两次。

所以输入后的条件属于循环。

但是,此外,您仅比较 char 数组的第 31 个字符(实际上已经超出了数组变量的范围!它们的索引从 0..29 开始,即即使您分配了 30 个字符的数组, )。这意味着,如果倒数第二个字符匹配,您的条件将为真。这个地方很可能还没有初始化,所以你比较基本的垃圾值,会得到意想不到/随机的结果。

如果你想,正如描述所暗示的那样,想要比较整个 char 数组,顺便说一下,它的工作方式不同(不是使用 == 运算符,它只会比较指针地址),你需要使用该strcmp函数。但更好的是使用std::string而不是char *.

于 2013-10-22T06:14:37.667 回答
1
void student_read()
{
    clrscr();
    std::string name, n, temp;
    int i, roll_no, code, count = 0;

    std::ifstream fin("tt.txt", ios::in | ios::beg);

    if (!fin)
    {
        std::cout << "cannot open for read ";
        return;
    }

    std::cout << "Enter the name of student" << "\n";
    std::cin >> n;

    while (fin >> name >> roll_no)
    {
        std::cout << roll_no << std::endl;
    }

    if (name == n)
    {
        std::cout << "roll no" << "\n" << roll_no;
    }
    else
        std::cout << "Not found";
}

int main()
{
    clrscr();
    std::cout << "Students details is\n";
    student_read();
    getch();
}
于 2013-10-22T14:02:52.937 回答