2014-02-25 83 views
1

能否帮我解决一下我的代码中的问题?编译后可执行文件出错

程序应该要求用户输入狗的名字,并最终打印第三只狗的名字。当我编译并执行程序时,它说“它停止工作”,并且Windows问我是否想关闭程序或执行其他操作。

#include<iostream> 
#include<cstdlib> 
using namespace std; 

main() 
{ 
    string perros[10]; 
    int i; 
    for(i=1; i<11; i++) 
    { 
     cout<<"Introduce el nombre del perro"<<endl<<i; 
     cin>>perros[i]; 

    } 

    cout<<"El nombre del tercer perro es "<<perros[2]; 
    system("pause"); 
} 

回答

1

你应该开始启动循环从0到9

for(i=0; i<10; i++) 

希望这将消除错误...

1

数组索引从零开始;所以你的回路应

for(i=0; i<10; i++) 

此致尝试写入到10个元素的数组的第11元件,破坏存储器和发动难言混乱。

0

您需要从零开始索引,而不是之一,因为那是何等的C/C++数组被索引。您将溢出堆栈对象的最大大小。

所以,你会在你原来的代码修复此问题后写这样的事:

#include<iostream> 
#include<cstdlib> 
using namespace std; 

main() 
{ 
    string perros[10]; 
    int i; 
    for(i=0; i<10; i++) 
    { 
     cout<<"Introduce el nombre del perro"<<endl<<i; 
     cin>>perros[i]; 

    } 

    cout<<"El nombre del tercer perro es "<<perros[2]; 
    system("pause"); 
} 

需要注意的是,你也不要,因为它的目的是用来使用的for循环。您可以将int i;行合并到for循环中。

但是,一个更智能的C++解决方案是使用标准算法,而不是非常低级别的索引,完全避免了这些问题。

所以,你会写这样的事:

#include<iostream> 
#include<cstdlib> 
#include <algorithm> 
using namespace std; 

void readNextString(string str) 
{ 
    cout<<"Introduce el nombre del perro"<<endl; 
    cin >> str; 
} 

main() 
{ 
    string perros[10]; 
    for_each(perros, perros + 10, readNextString); 
    cout<<"El nombre del tercer perro es "<<perros[2]; 
    system("pause"); 
} 
+0

感谢兄弟,我不知道有很多的命令又COS我是个一年级学生哈哈但是,是我纠正了代码和它的工作真的很好,感谢所有 –

+0

@PacoMeraz:只需使用我粘贴的第二个片段即可。不要使用低级索引,当你真的希望遍历每个元素而不需要索引。如果你碰巧使用C++ 11,你甚至可以用readNextString函数来取消lambda。 – lpapp