C++ 读取.txt文件中的特定单词

C++ 读取.txt文件中的特定单词,c++,ifstream,turbo-c++,C++,Ifstream,Turbo C++,我有一个txt文件,其中包含学生的姓名和学号。我想从他的文件中读取并显示一个特定的卷号。它只显示第一个卷号,但我想读取第二个人的卷号 也就是说,如果我想读取“ss”的卷号,它会显示第一人称的卷号 节目是 #include<iostream.h> #include<conio.h> #include<fstream.h> #include<string.h> #include<stdio.h> void student_read() {

我有一个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();
}
#包括
#包括
#包括
#包括
#包括
无效学生读物()
{
clrsc();
字符名[30],n[30],temp[30];
int i,卷号,代码,计数=0;
ifstream-fin(“tt.txt”,ios::in | ios::beg);
如果(!fin)
{
cout>名称>>卷(卷号)
{

您的文本文件中是否有每行的结尾?您是否有
sourav 123 ss 33
sourav 123\nss 33
?如果(n[30]==name[30])
只比较字符串中的一个字符。

文本文件中是否有每行的结尾?是否有
sourav 123 ss 33
sourav 123\nss 33
?如果(n[30]==name[30])只比较字符串中的1个字符。

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

重新排列您的语句,如下所示:

cout<<"Enter the name of student"<<"\n";
cin>>n;
while(fin>>name>>roll_no)
{
    //...
coutname>>滚动(编号)
{
//...
此外,如果您只想输出一个名称和卷号,那么在循环中,您必须检查某种条件是否要打印。此时,您的代码实际上应该打印文件中所有行的卷号,有时可能会打印最后一行两次

因此,输入后的条件属于循环

此外,您只比较字符数组的第31个字符(实际上已经超出了数组变量的范围!它们的索引从0到29,也就是说,即使您分配了一个30个字符的数组,也会。这意味着,如果下一个字符与最后一个字符匹配,您的条件将为真。此位置很可能尚未初始化,因此您基本上比较了gargabe值,并将得到意外/随机结果


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

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

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();
}
重新排列您的语句,如下所示:

cout<<"Enter the name of student"<<"\n";
cin>>n;
while(fin>>name>>roll_no)
{
    //...
coutname>>滚动(编号)
{
//...
此外,如果您只想输出一个名称和卷号,那么在循环中,您必须检查某种条件是否要打印。此时,您的代码实际上应该打印文件中所有行的卷号,有时可能会打印最后一行两次

因此,输入后的条件属于循环

此外,您只比较字符数组的第31个字符(实际上已经超出了数组变量的范围!它们的索引从0到29,也就是说,即使您分配了一个30个字符的数组,也会。这意味着,如果下一个字符与最后一个字符匹配,您的条件将为真。此位置很可能尚未初始化,因此您基本上比较了gargabe值,并将得到意外/随机结果

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

void student\u read()
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();
}
{ clrsc(); std::字符串名称,n,temp; int i,卷号,代码,计数=0; std::ifstream fin(“tt.txt”,ios::in | ios::beg); 如果(!fin) { std::cout>名称>>卷号) { std::cout
void student\u read()
{
clrsc();
std::字符串名称,n,temp;
int i,卷号,代码,计数=0;
std::ifstream fin(“tt.txt”,ios::in | ios::beg);
如果(!fin)
{
std::cout>名称>>卷号)
{

std::cout这是复制粘贴事故!!!!!这是复制粘贴事故!!!!!您只比较一个符号。if中的n[30]表示数组中的最后一个符号。使用
if(strncmp(n,name,30)==0)
而不是
if(n[30]==name[30])
包含string.h或使用
if(std::string(n)==std::string(name))
只比较一个符号。if中的n[30]表示数组中的最后一个符号。使用
if(strncmp(n,name,30)==0)
而不是
if(n[30]==name[30])
包含string.h或使用
if(std::string(n)==std::string(name))
你能根据我的评论展示你尝试了什么吗?我可以写代码,但我不明白为什么我要比你花更多的时间解决这个问题;)你能根据我的评论展示你尝试了什么吗?我可以写代码,但我不明白为什么我要比你花更多的时间解决这个问题;)