标题:写编程练习,运行异常,不知道问题在哪,求大佬
只看楼主
gzy444
Rank: 1
等 级:新手上路
帖 子:15
专家分:7
注 册:2020-1-16
结帖率:100%
已结贴  问题点数:20 回复次数:13 
写编程练习,运行异常,不知道问题在哪,求大佬
#include<iostream>
#include<string>
using namespace std;
struct car { string name; int year; };
int main() {
    cout << "How many cars do you wish to catalog?";
    int a;
    cin >> a;
    cin.get();
    car* A = new car[a];
    for (int i = 0; i <= a; i++) {
        cout << "Car #" << i + 1 << ":" << endl;
        cout << "Pleaseenter the make:";
        getline(cin, A[a].name);
        cout << "Please enter the year made:";
        cin >> A[a].year;
        cin.get();
    };
    cout << "Here is your collection:" << endl;
    for(int j=0;j<=a;j++)
    cout << A[j].year << " " << A[j].name << endl;
    delete[] A;
    return 0;
}

输入int值a之后提示异常:
引发了异常: 写入访问权限冲突。
**_Left** 是 0x51EE1DC。

这是哪出问题了,语句写的不对么?

[此贴子已经被作者于2020-1-16 19:32编辑过]

搜索更多相关主题的帖子: cout 异常 int year cin 
2020-01-16 17:51
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
编译异常
输入int值a之后提示异常:引发了异常: 写入访问权限冲突。**_Left** 是 0x51EE1DC。
你这明明是“运行异常”

输入int值a之后提示异常
不要说这么抽象的话,直接说输入“123”后提示异常、输入“一百二十三”后提示异常、输入“9999999999999999999999999999999999999999”后提示异常、……

car* A = new car[a];
for (int i = 0; i <= a; i++) {
for(int j=0;j<=a;j++)
数组越界了,改 <= 为 < 。
2020-01-16 18:55
gzy444
Rank: 1
等 级:新手上路
帖 子:15
专家分:7
注 册:2020-1-16
得分:0 
回复 2楼 rjsp
嗯。。。。我是萌新,也不知道该咋描述。。。。
改完<号之后还是那个提示:

引发了异常: 写入访问权限冲突。
**_Left** 是 0x239CA18C。

下面是异常的时候VS里弹出的一个叫xstring标签页的里面打叉的语句
    static _CONSTEXPR17 void assign(_Elem& _Left, const _Elem& _Right) noexcept {
        _Left = _Right;

2020-01-16 19:32
gzy444
Rank: 1
等 级:新手上路
帖 子:15
专家分:7
注 册:2020-1-16
得分:0 
回复 2楼 rjsp

刚百度了下 数组越界 ,说的是数组下标超出或者等于数组元素数,我改了new car[a+1]之后确实可以了。
难道这种输入变量作为数组元素数必须要有+1么?

蒙了,输出的是一组数字(貌似是类型转换?),百度了下C++Primer plus第五章第7题的答案,跟我的程序一样,而且数组后面没有+1.。。

[此贴子已经被作者于2020-1-16 20:00编辑过]

2020-01-16 19:45
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
你这是萌新中的大佬啊?虽然听了一天的英语。但是你代码中的英文我看到泪牛满面,我还想学习来着,但是我看了一会儿真的看不懂码是要干啥的(=_=)原谅小白的无知。。。这题目到底啥意思啊?😱要做什么啊?

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-16 20:19
gzy444
Rank: 1
等 级:新手上路
帖 子:15
专家分:7
注 册:2020-1-16
得分:0 
回复 5楼 叶纤
额。。。我这是C++primer第五章的课后练习题。。。
都是非常简单的语句,刚学,写的比较粗糙。。。
咱俩都是新手,我觉得你完全没必要去把语句里的每个单词都弄清楚啥意思,只要知道他是干啥用的就行了(我就是)。当然,要是知道本来的意思应该会更容易理解记忆。
题目是下面这个:

7. 设计一个名为car的结构,用它存储下述有关汽车的信息: 生产商(存储在字符数组或string对象中的字符串)、生产年份(整数)。编写一个程序,向用户询问有多少辆汽车。随后,程序使用new来创建一个由相应数量的car结构组成的动态数组。接下来,程序提示用户输入每辆车的生产商(可能由多个单词组成)和年份信息。请注意,这需要特别小心,因为它将交替读取数值和字符串(参见第4章)。最后,程序将显示每个结构的内容。该程序的运行情况如下:
How many cars do you wish to catalog? 2
Car #1:
Please enter the make: Hudson Hornet
Please enter the year made: 1952
Car #2:
Please enter the make: Kaiser
Please enter the year made: 1951
Here is your collection:
1952 Hudson Hornet
1951 Kaiser
————————————————
版权声明:本文为CSDN博主「wyl1813240346」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.
2020-01-16 22:36
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:5 
#include<iostream>
#include<string>
using namespace std;
struct car { string name; int year; };
int main() {
    cout << "有多少辆车";
    int a;
    cin >> a;
    cin.get();
   
    car* A = new car[a];
    for (int i = 0; i <a; i++) {//如果等于a就是多一个车
        cout << "Car #" << i + 1 << ":" << endl;
        cout << "生产商";
        getline(cin, A[i+1].name);//A[a]你是想输入第a辆车的名字吗
        cout << "年份";
        cin >> A[i+1].year;//A[a]你是想输入第a辆车的年吗
        cin.get();//你知道这里为什么用cin.get吗
        
    };
    cout << "收集信息" << endl;
    for(int j=1;j<=a;j++)
    cout << A[j].year << " " << A[j].name << endl;
    delete[] A;
    return 0;
}
你想要的结果是这样的吗

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-16 22:38
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
我查英语单词查到吐血

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-01-16 22:39
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:15 
回复 3楼 gzy444
你代码中还有处“A[a]”需要改为“A[i]”

好好写代码的话,代码应该类似于
程序代码:
#include <iostream>
#include <string>
#include <limits>
#include <new>
using namespace std;

struct car
{
    std::string name;
    unsigned year;
};

int main( void )
{
    cout << "How many cars do you wish to catalog?";
    size_t n;
    if( !(cin>>n) )
        return 1;
    cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );

    car* p = new(nothrow) car[n];
    if( !p )
        return 2;
    for( size_t i=0; i!=n; ++i )
    {
        cout << "Car #" << i+1 << ":\n";

        cout << "Please enter the make:";
        if( !getline(cin,p[i].name) )
            return 1;

        cout << "Please enter the year made:";
        if( !(cin>>p[i].year) )
            return 1;
        cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
    };

    cout << "Here is your collection:\n";
    for( size_t i=0; i!=n; ++i )
        cout << p[i].year << " " << p[i].name << '\n';

    delete[] p;
}

其中,“car* p = new(nothrow) car[n];”是不好的,因为没法保证调用者不会忘了delete[] p。故而应该用 std::unique_ptr<car[]> p{ new car[n] }; 替代
程序代码:
#include <iostream>
#include <string>
#include <limits>
#include <new>
#include <memory>
using namespace std;

struct car
{
    std::string name = {};
    unsigned year = 0;
};

int main( void )
{
    cout << "How many cars do you wish to catalog?";
    size_t n;
    if( !(cin>>n) )
        return 1;
    cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );

    std::unique_ptr<car[]> p{ new(nothrow) car[n] };
    if( !p )
        return 2;
    for( size_t i=0; i!=n; ++i )
    {
        cout << "Car #" << i+1 << ":\n";

        cout << "Please enter the make:";
        if( !getline(cin,p[i].name) )
            return 1;

        cout << "Please enter the year made:";
        if( !(cin>>p[i].year) )
            return 1;
        cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
    };

    cout << "Here is your collection:\n";
    for( size_t i=0; i!=n; ++i )
        cout << p[i].year << " " << p[i].name << '\n';
}


2020-01-17 09:49
gzy444
Rank: 1
等 级:新手上路
帖 子:15
专家分:7
注 册:2020-1-16
得分:0 
回复 9楼 rjsp
对对对!改成A(i)就对了!是我太粗心了,A[a]是个固定的结构下标,A[i]才应该对!!!
检查那么多遍没检查出来,我太粗心了。。
谢谢大佬~!
还有就是大佬你给的这两段代码没看懂,比如那个return 1还有就是声明动态结构那个语句。。。可能是我刚开始学,好多都看不懂。。。我接着往下看吧,一点一点来,第六章就有if之类的分支语句了~
再次感谢!

[此贴子已经被作者于2020-1-17 10:17编辑过]

2020-01-17 10:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-498949-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025019 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved