【发布时间】:2013-08-17 16:39:40
【问题描述】:
本来我是用string_array.find(item)搜索的,但是编译器说不行。
然后我搜索看看是否可以使用string_array->find(item)通过指针来解决问题,但是没有任何解释。
这是我的代码:
#include<iostream>
#include<string>
using namespace std;
string name [100];
int Jan[100]={0}, Feb[100]={0}, Mar[100]={0}, Apr[100]={0}, May[100] = 0, Jun[100]={0},Jul[100]={0}, Aug[100]={0},Sep[100]={0},Oct[100]={0},Nov[100]={0},Dec[100]={0};
int earning [100];
int main () {
ifstream load;
load.open("record.txt");
if(load.fail()){
cout << "error in loading data" << endl;
exit(1);
}
else {
int i = 0;
string NAME;
int EARNING;
int MONTH;
int dump1;
char dump2;
while ( load.eof() != 1 ) {
int n = 0;
load >> NAME >> EARNING >> dump1 >> dump2 >> MONTH >> dump2 >> dump1 ;
n = name->find(NAME);
if ( n < 0 ) {
n = i ;
}
else {
i = i - 1 ;
}
name[n] = NAME;
if ( MONTH == 1) { Jan[n] += EARNING ;}
if ( MONTH == 2) { Feb[n] += EARNING ;}
if ( MONTH == 3) { Mar[n] += EARNING ;}
if ( MONTH == 5) { Apr[n] += EARNING ;}
if ( MONTH == 5) { May[n] += EARNING ;}
if ( MONTH == 6) { Jun[n] += EARNING ;}
if ( MONTH == 7) { Jul[n] += EARNING ;}
if ( MONTH == 8) { Aug[n] += EARNING ;}
if ( MONTH == 9) { Sep[n] += EARNING ;}
if ( MONTH == 10) { Oct[n] += EARNING ;}
if ( MONTH == 11) { Nov[n] += EARNING ;}
if ( MONTH == 12) { Dec[n] += EARNING ;}
i++;
}
}
}
【问题讨论】:
-
其实不需要看代码很详细.......从ifstream读取一个文件......有一个名称[100]的数组...... ....cin >> 给出 NAME,然后使用 ;;find 搜索 name[100] 如果 NAME 之前存在
-
+1 “但编译器说不”可能是我听说过的关于编译器错误的 BEST 事情。我的意思是,编译器对我们的代码变得更加自我意识,所以它看到了代码并且不想修复它,所以它只是说不。运行
gcc main.c。输出GCC 4.8.1: No。 -
您的 while 循环不会像您希望的那样工作。
load.eof()直到 在 您尝试从中读取并且由于到达文件末尾而读取失败后才会返回 true。您的循环条件应该是读取是否成功(如while(load >> whatever) {...})。此外,给变量全大写名称(用于宏)也是不好的风格,并且有两个名称除了大小写相同的变量也是非常不好的风格。 -
当我使用 while( load>> wtever ){ ....} 时,函数 name->find(NAME) 不再像以前那样起作用....所以,我有两个问题。 ....(1)为什么如果按上述使用它可以运行(忽略eof的失败)??............(2)为什么当我转到while时它可以运行(加载>> wtever){.......} ??????
标签: c++ arrays string pointers