Что я вижу в вашем цикле, так это то, что вы не читаете ни одной строки, если не находитесь на той строке, на которой хотите быть.Но так как вы не читаете ни одной строки, вы не получите дальше той строки, которую хотите прочитать.Это не только мешает вам достичь строки, которую вы на самом деле хотите прочитать, но и не достигает eof в приемлемое время (вы будете после переполнения guthaben
столько раз, сколько строк в вашем файле).Итак, что вам нужно сделать, это прочитать строку при любых обстоятельствах и отбросить значение, если оно вам не нужно.Попробуйте:
for ( int guthaben=0;!user1.eof();guthaben++){ //i think this is understandable
if (guthaben==6){ //in this case the desired value is on line 6
getline(user1, inhalt_guthaben);
Guthaben=atoi(inhalt_guthaben.c_str()); //from string to int to the desired value Guthaben.
}else
getline(user1, inhalt_guthaben);
}
или
for ( int guthaben=0;!user1.eof();guthaben++){ //i think this is understandable
getline(user1, inhalt_guthaben);
if (guthaben==6){ //in this case the desired value is on line 6
Guthaben=atoi(inhalt_guthaben.c_str()); //from string to int to the desired value Guthaben.
}
}
Обратите внимание, что это приведет к проблемам с вашим текущим стилем чтения.было бы лучше иметь все в одном цикле, как предлагал e.James:
for ( int zeile=1;!user1.eof();zeile++){//Natural counting (beginning at 1)!
std::string inhalt;
getline(user1, inhalt);
switch(zeile){
case 1:
strcpy(Anrede,inhalt.c_str());
break;
case 2:
strcpy(vname,inhalt.c_str());
break;
case 3:
strcpy(nname,inhalt.c_str());
break;
case 4:
echte_kontonummer=atol(inhalt.c_str());
break;
case 5:
echte_pin=atoi(inhalt.c_str());
break;
case 6:
Guthaben=atoi(inhalt.c_str());
break;
}
}
Также обратите внимание, что очень плохо иметь переменные Guthaben
и guthaben
, которые можно легко перепутать(если они еще не).Я бы посоветовал вам переименовать guthaben
в zeile
, поскольку он определяет, на какой строке вы хотите прочитать.