如果a.txt说
abc def ghi
1。我只能阅读ghi吗? 2.我可以在ghi旁输入jkl来制作a.txt
abc def ghi jkl
我尝试了第一个问题:
#include <iostream>
using namespace std;
int main() {
int i;
char str[3];
ifstream read("a.txt");
for(i = 0; i < 3; i++)
read >> str;
return 0;
}
我尝试了第二个问题:
#include <iostream>
using namespace std;
int main() {
ofstream write("a.txt");
write << "jkl" << endl;
return 0;
}
在我尝试第一个问题时,它只读了abc。 在我尝试第二个问题时,它写了jkl,但结果是
abc def ghi
jkl
我的代码有什么问题?
答案 0 :(得分:0)
您期望每个字的长度为3个字节("abc"
),但最后包含空字符,因此确实需要4个字节来存储"abc"
。您应该声明char str[4];
更好,使用std::string str;
这样您就不必担心单词是否太长。然后将运算符>>
放入while循环中,如下所示:
#include <iostream>
#include <string>
#include <fstream>
int main()
{
std::string str;
std::ifstream read("a.txt");
while(read >> str)
{
if(str == "ghi")
{
std::cout << "found it: " << word << "\n";
break;
}
}
return 0;
}
还有代码
std::ofstream write("a.txt");
write << "text";
将覆盖文件"a.txt"
,除非您使用std::ios::app
标志,否则它不会附加到结尾。
请参阅 Input/Output tutorial 了解标记
答案 1 :(得分:0)
如果你来Stack Overflow,你必须有一个难以研究的问题,甚至是一个前所未有的新问题。
搜索输入/输出流教程,this tutorial非常好,请仔细阅读,我保证当你完成后,你几乎会澄清所有问题。
#include <iostream>
using namespace std;
int main() {
int i;
char str[3];
ifstream read("a.txt");
for(i = 0; i < 3; i++)
read >> str;
return 0;
}
fstream
。int
循环的第一个参数中声明for
。char[]
(字符数组),在现代C ++代码中有点弃用,您应该使用string
代替。 为什么?因为string
具有动态大小,char[]
具有静态大小,想象您想要检索更大的字符串,表示它的长度为10,您的{{ 1}}变量将无法存储该字符串,如果您使用str
,则可以接受任何大小的字符串。 string
是否已成功开启read
。很明显,如果"a.txt"
不存在或者其他进程正在使用它,则无法从"a.txt"
读取。 while
代替for
来迭代文件。您希望阅读,直到您获得字符串"ghi"
或直到您阅读该文件的所有内容。修改版本:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
string str;
ifstream read("a.txt");
if (!read) {
cout << "Cannot open the file!" << endl;
return 1;
}
while (read) {
read >> str;
if (str == "ghi") {
cout << "Found!" << endl;
return 0; // Instantly terminates the program if we found "ghi"
}
}
// If our program reach this point mean that we didn't found
// "ghi", so we print that we didn't found it
cout << "Not found!" << endl;
return 0;
}
#include <iostream>
using namespace std;
int main() {
ofstream write("a.txt");
write << "jkl" << endl;
return 0;
}
fstream
。ofstream
创建一个文件,如果它不存在的话。 (在教程链接和谷歌搜索中进一步阅读)jkl def ghi
ios::flags
将内容附加到您的文件中,这会将您的内容添加到文件的末尾,这也意味着如果您的文件有换行符,则所有内容都将添加到其后,你会得到这样的东西abc def ghi jkl