我想制作通过数字读取文件的控制台项目。示例:按数字 1 2 查找,它仅在包含这些数字的文件夹的文本控制台行中打印
bibi ceki 1 2
hasesh cekiii 1 3
krki cko 1 2
在这种情况下,它只会打印出来#b; bibi ceki"和" krki cko"。 在我的代码中有许多遗漏的东西。我没有一个循环来检查是否有正确的数字,但这是我能做的最好和我尝试过的:
#include <fstream>
#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main() {
char str1[10], str2[10];
int raz, ode;
ifstream infile("file.txt");
while (infile.good()) {
fscanf(infile, "%s %s %d %d", str1, str2, &raz, &ode); //this thing cant be used lik this
while(raz==1 && ode==2) {
string sLine;
getline(infile, sLine);
cout << sLine << endl;
}
}
infile.close();
return 0;
}
正如您所看到的,fscanf的行不起作用,我不知道该怎么做。
如果有更好的方法,我需要一些帮助和建议,请尽可能具体,我是c ++ / c中的新人。
答案 0 :(得分:6)
您正在混合C fscanf函数和C ++ ifstream。
我建议使用C ++,在这种情况下,您可以使用运算符&gt;&gt;像这样:
std::string str1, str2 ;
...
//substitute the following line with the one below
//fscanf(infile, "%s %s %d %d", str1, str2,&raz,&ode);
infile >> str1 >> str2 >> raz >> ode ;
答案 1 :(得分:4)
您可以使用std::getline
逐行阅读,直到代码匹配为止,您可以将push_back
名称std::vector
添加到'|'
。您还可以使用分隔符(例如bibi ceki|1 2
hasesh cekiii|1 3
krki cko|1 2
)构建文件,以便在名称和其余代码之前读取该字符。示例文件将是:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
int main()
{
ifstream in_file("file.txt", ios::in);
vector<string> vec;
string names; // store names like: "bibi ceki"
string codes; // store codes like: "1 2"
while (getline(in_file, names, '|')) {
getline(in_file, codes, '\n');
if (codes == "1 2")
vec.push_back(names);
}
for (unsigned int i = 0; i != vec.size(); ++i)
cout << vec[i] << endl;
in_file.close();
}
以下是如何实现这一目标的示例:
bibi ceki
krki cko
输出:
value = [[u"Seba", u"10"], [u"[Gianfranco", u"80"], [u"[Marco", u"20"], [u"[Massimo", u"125"]]