这个char为什么会阻止我的程序?

问题描述:

换行符在C++中有什么特别的意义吗?它是一个非ASCII字符吗?这个char为什么会阻止我的程序?

我正在尝试为大块文本中的每个独特的n字符子字符串构建一个马尔可夫链。每遇到一个新的唯一子字符串,我将它输入一个映射,其值是一个256元素的向量(扩展ASCII表中每个字符的一个元素)。

有没有问题,当我打印出来的文件的全部内容(“线”是用ifstream的和函数getline建行文本的向量):

for(int i=0; i<lines.size(); i++) cout << lines[i] << endl; 

整个文本文件中显示出来安慰。当我尝试将换行符返回给期望char的函数时,会发生问题。 “moveSpaces”是一个整数常量,用于确定在每次迭代中向前移动字符串向量中的多少个字符。

char GetNextChar(int row, int col){ 
    for (int i=0; i<MOVESPACES; i++) { 
     if (col+1<lines[row].size()) { 
      col+=1; 
     } else {  // If you're not at the end of the line keep going 
      row+=1;  // Otherwise, move to the beginning of the next row 
      col=0; 
     } 
    } 
    return lines[row].at(col); 
}  

我走通过与调试器,当它到达它胡扯出来我2号线的第1列 - 没有错误或任何东西。它在此函数内失败,而不是调用函数。

我正在使用的文件是圣诞颂歌(在古登堡计划中出现的第一件事)。以下是前几行:

STAVE I: MARLEY'S GHOST 

MARLEY was dead: to begin with. There is no doubt 
whatever about that. The register of his burial was 

函数在应该返回第二行的第一个字符时中断。如果我摆脱换行符,或者如果我在程序中逐行建立“线”向量,则不会发生这种情况。任何想法有什么不对?

+0

什么是'moveSpaces'? –

+3

我的调试器从不会对我产生任何影响......你的态度并不好,显然 –

+2

老实说,我不能对这个问题做出正面或反面的评论。 “失败”是什么意思? – MSalters

您的GetNextChar函数假设如果您在某行的最后一个字符处,则会在下一行中出现一个字符。如果下一行中没有字符会发生什么?这可能发生在两个地方:当您击中文件结尾或下一行是空字符串时。

第二行是空字符串。

+0

当然!太感谢了。 – jefflovejapan

+0

好点:所有关于换行符的讨论都让我觉得他确实有换行符。但最开始的'endl'表明,尽管提到了这些换行符,但他实际上并不存储它们,只是将它们重新插入到输出中。 – MSalters