C++ 使用c++;,为什么我会收到错误消息;字符串下标超出范围“;当我知道不是的时候?或者至少看起来是这样

C++ 使用c++;,为什么我会收到错误消息;字符串下标超出范围“;当我知道不是的时候?或者至少看起来是这样,c++,string,char,fstream,outofrangeexception,C++,String,Char,Fstream,Outofrangeexception,编辑-没有空行。 编辑2-我的错,似乎我一直都错了。某个地方有一个空行,尽管csv文件另有指示。它正在工作。 好的,下面是整个(简短)计划: #包括 #包括 #包括 #包括 使用名称空间std; int main(){ 字符a; 线绳; fstream myfile(“readthisfile.csv”); 如果(myfile.is_open()){ while(myfile.good()){ getline(myfile,stringmanip); a=stringmanip[0]; } my

编辑-没有空行。 编辑2-我的错,似乎我一直都错了。某个地方有一个空行,尽管csv文件另有指示。它正在工作。 好的,下面是整个(简短)计划:

#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
字符a;
线绳;
fstream myfile(“readthisfile.csv”);
如果(myfile.is_open()){
while(myfile.good()){
getline(myfile,stringmanip);
a=stringmanip[0];
}
myfile.close();
}

否则无法如果readthisfile.csv在文件末尾(或文件中的任何位置)有一个空行,则您将返回一个空字符串。您不能取消对空字符串第0个字符的引用。
string::operator[]
只接受从
0
string::length()的索引-1
。如果您有一个空字符串,任何对
string::operator[]的调用都将导致未定义的行为。

如果readthisfile.csv在文件末尾(或文件中的任何位置)有一个空行,那么您将返回一个空字符串。您不能取消引用空字符串的第0个字符。
string::operator[]
只接受从
0
string::length()-1
的索引。如果有空字符串,任何对
string::operator[]
的调用都将导致未定义的行为。

文件是否包含任何空行?另外,
系统(“暂停”);
。(我几乎运行了你的代码来测试它,在我的系统上,有一个名为
暂停
的命令,它关闭了我家反应堆的冷却系统。)对不起,我去掉了它。不,它不包含任何空行。你的文件包含任何空行吗?还有
系统(“暂停”);
。(我几乎运行了你的代码来测试它,在我的系统上,有一个名为暂停的命令,它关闭了我家反应堆的冷却系统。)对不起,我把它处理掉了。不,它不包含任何空行。+1还有,
while(myfile.good())
应该是
while(getline(myfile,stringmanip))
。我希望整个
while(!stream.eof())
/
while(stream.good())
反模式已经消失。哈哈,我不能强调我有多新,对不起。+1还有,
while(myfile.good())
应该是
while(getline(myfile,stringmanip))
。我希望整个
while(!stream.eof())
/
while(stream.good())
反模式已经死了。哈哈,我不能强调我有多新,对不起。
#include <iostream>
#include <cctype>
#include <string>
#include <fstream>
using namespace std;

int main(){
    char a;
    string stringmanip;

    fstream myfile("readthisfile.csv");
    if (myfile.is_open()){
        while ( myfile.good() ){
            getline(myfile,stringmanip);
            a=stringmanip[0];
        }
        myfile.close();
    }
    else cout<< "Unable to open file";

    return 0;
}