【发布时间】:2014-08-23 18:16:12
【问题描述】:
您好,当我将包含空格的文件读入链接列表时遇到问题
这是读入的文件:
19 , 11 米 4 8 b 23 q 33
这是我的代码
struct story
{
char letter;
int number;
story *next;
};
int main()
{
story *head = NULL; // list head pointer
ifstream inFile;
char letter;
int num;
// read file
inFile.open(FILENAME.c_str());
if(inFile.fail())
cout << "Error..." << endl;
while (inFile >> letter){
cout << letter << " " ;
inFile >> num ;
cout << num << " ";
}
inFile.close();
return 0;
}
输出:a 19 , 11 m 4 8 0
程序在读取文件时跳过空格。它停止读取文件。 getline() 函数有助于阅读,但我想分别存储 char 和 int,因为这是一个链表项目。
【问题讨论】:
-
你的问题是什么?在任何情况下,请注意您不验证
num是否已成功读取:您可能最好使用while (inFile >> letter >> num) { ... }。如果要禁用跳过空格,可以使用inFile >> std::noskipws,然后根据需要使用inFile >> std::ws跳过空格。 -
此外,您的文件不遵循您用来从中读取的模式(char 然后是 int 的迭代)。
a 19 , 11 m 4 8 b 23 q 33应读作 char, int, char, int, char, int, int, char, int, char, int. -
你需要考虑分号,跳过它。
-
@DietmarKühl :我试图做 while(inFile>>noskipws>>letter>>num){...} 它什么也没读
-
@user3923936:这并不奇怪!如果您不希望输入运算符跳过前导空格,则需要自己做。也就是说,表达式将读取一个字母但读取一个数字失败,因为看到的下一个字符是空格!你抱怨空格会被自动跳过,我告诉你如何禁用它(有关详细信息,我确信你查阅了有关
std::noskipws所做操作的手册)。你也没有澄清你的问题是什么。当然,在您的序列中,您不会在某事和整数之间交替:b将被读取为int,这将失败。
标签: c++ list file-io linked-list