Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+;中按字符读取输入文件时换行+;_C++_File Io_Char_Line Breaks - Fatal编程技术网

C++ 在C+;中按字符读取输入文件时换行+;

C++ 在C+;中按字符读取输入文件时换行+;,c++,file-io,char,line-breaks,C++,File Io,Char,Line Breaks,好的,先说一句,这是作业,但下一周就到期了,我也不完全确定作业的最终细节。长话短说,在不知道他会在课堂上介绍什么概念的情况下,我决定尝试一下作业,但我遇到了一个问题。我需要做的部分作业是从输入文件中读取单个字符,然后给定字符在其包含单词中的位置,在屏幕上重复该字符。我遇到的问题是,文本文件中的单词是单个单词,每个单词在文件中的不同行上。由于我不确定我们是否可以使用来完成这项作业,我想知道是否有任何方法可以不使用来标识行的结尾 现在,我正在使用一个简单的ifstreamfin将字符拉出。我只是不知

好的,先说一句,这是作业,但下一周就到期了,我也不完全确定作业的最终细节。长话短说,在不知道他会在课堂上介绍什么概念的情况下,我决定尝试一下作业,但我遇到了一个问题。我需要做的部分作业是从输入文件中读取单个字符,然后给定字符在其包含单词中的位置,在屏幕上重复该字符。我遇到的问题是,文本文件中的单词是单个单词,每个单词在文件中的不同行上。由于我不确定我们是否可以使用
来完成这项作业,我想知道是否有任何方法可以不使用
来标识行的结尾

现在,我正在使用一个简单的
ifstreamfin将字符拉出。我只是不知道如何让它识别一个词的结尾和另一个词的开头。为了包含代码,以下是我到目前为止得到的全部内容。我希望它能显示某种类型的
endl
字符,但它只是以连成一行的方式打印所有单词

ifstream fin;
char charIn;

fin.open("Animals.dat");
fin >> charIn;
while(!fin.eof()){
    cout << charIn;
    fin >> charIn;
}
ifstream-fin;
查尔查林;
财务公开(“动物数据”);
fin>>查林;
而(!fin.eof()){
库特>查林;
}
最初我忘了包括几件事:

我必须在输入时处理每个字符(在读取下一个字符并增加计数器之前,需要运行打印它的循环)。另外,“Animals.dat”中的单词长度也不尽相同,这使得我无法设置迭代次数。我们还没有介绍fin.get()或.getline(),所以这些也是禁止使用的


老实说,我不能想象这是不可能的,但考虑到限制,如果是的话,我并不太难过。我大多认为这是一个有趣的问题,可以坐一会儿。

为什么不使用一系列字符?您可以按如下方式进行尝试:

    #define MAX_WORD_NUM 20
    #define MAX_STR_LEN 40 //I think 40 is big enough to hold one word.
    char words[MAX_WROD_NUM][MAX_STR_LEN];
然后你可以在单词中输入一个单词

    cin >> words[i];

>
运算符忽略空格,因此永远不会获得换行符。即使不允许使用
类,也可以使用c字符串(字符数组):

ifstream fin;
char animal[64];

fin.open("Animals.dat");

while(fin >> animal) {
  cout << animal << endl;
}

嗯,如果你用
while(/*读一些东西*/)
替换
while(!fin.eof())
,希望你的老师会更高兴。如果文件是以文本文件而不是二进制文件打开的,那么在Unix和Windows上,行尾将显示为新行,
'\n'
。你能详细说明位置重复说明吗?你的意思是“猫”这个词会变成“caattt”吗?我想指出,这是一个家庭作业问题的例子,与大多数问题相比,这个问题提出得非常好。这不是“给我一个密码”,这不是一个逐字张贴的作业,也不是一个没有人会理解的作业的模糊描述。它有一个描述性的标题、一个特定的问题和一个明确的解决方案。它还包括对该问题的尝试。这表明,只要正确张贴,家庭作业问题和其他问题一样合理。我只想感谢所有回答和贡献的人。我问这个问题的主要原因是,考虑到我们已经在课堂上讨论过的内容,看看是否有解决方案。今天,他介绍说。所以,对于任何关心此事的人来说,这就是他希望我们走的路。再次感谢。谢谢你的回复。这个解决方案并没有解决我最初的问题,在阅读单个字符时,我不知道如何区分一个单词的结尾。它们的长度各不相同,所以没有办法说读这么多然后转到下一个单词。另外,这让我想起了我的问题中需要澄清的一些事情。@jvance:一旦单词存储在数组中,访问单个字符就很容易了。是的,然后他就可以很容易地做他想做的事情。在再次阅读你的回复(并根据其他一些回复)后,我明白了我第一次犯的错误。不过,再次感谢您的回答。注意:您可以使用一个粘性操纵器关闭空格跳过,从而使读取任何临时缓冲区的需要变得毫无意义。直接读取字符的方法是使用
read
get
函数,而不是用于格式化I/O的
>
。Wait,-1。
操作符>>
不知道此处的数组大小,它将其视为
字符*
,并使用与
std::string
相同的字符串语义,但没有内存安全性。不知道这是怎么回答这个问题的。
c = animal[0];
for(int i = 1; c != 0 && i < 64; i++)
{
    // do something with c
    c = animal[i];
}