| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4270 人关注过本帖
标题:写编程练习,运行异常,不知道问题在哪,求大佬
取消只看楼主 加入收藏
gzy444
Rank: 1
等 级:新手上路
帖 子:15
专家分:7
注 册:2020-1-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
写编程练习,运行异常,不知道问题在哪,求大佬
#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
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
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
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
gzy444
Rank: 1
等 级:新手上路
帖 子:15
专家分:7
注 册:2020-1-16
收藏
得分:0 
回复 7楼 叶纤
嗯对!就是这个!A[a]改成A[i]。自己太粗心了,没注意到
还有就是你这个手机端叫啥

下面是自己写的最终版
#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++) {       //这是个循环(for语句),当i<a时,执行大括号里的语句;然后i自增1继续判定i<a
        cout << "Car #" << i + 1 << ":" << endl;
        cout << "Pleaseenter the make:";
        getline(cin, A[i].name);
        cout << "Please enter the year made:";
        cin >> A[i].year;
        cin.get();     //cin.get()是为了丢弃上面cin>>A[i].year输入后产生的换行符,否则下次输入时读到换行符会跳过输入
    };
    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;
}


另外,9楼版主大佬写的那个应该看看(虽然好多看不懂),尤其是delete[]这个,确实很多时候会忘

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

2020-01-17 10:04
gzy444
Rank: 1
等 级:新手上路
帖 子:15
专家分:7
注 册:2020-1-16
收藏
得分:0 
回复 12楼 叶纤
我网上查学C++用啥书的时候,有不少人都说C++ primer所以就买来看喽,至于顺序什么的能学会就行了呗2333
2020-01-17 14:01
快速回复:写编程练习,运行异常,不知道问题在哪,求大佬
数据加载中...
 
   



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

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