向用户询问const

时间:2016-02-28 18:44:08

标签: c++ const

有朋友的代码。它有效,但我们想问我们的用户他想要输入多少次信息。更简单,我们不知道如何向我的用户询问N(“const int N = 3”行)。我们已经尝试将“const int”更改为“int”,但随后出现错误“表达式必须具有常量值”。

#include <iostream>
using namespace std;
struct T_dane_ksiazki
{
    char imie[15];
    char nazwisko[30];
    char tytul[45];
    int rokwydania;
    int nrwydania;
};
void WCZYTAJ_dane(T_dane_ksiazki& dane) /*wczytanie informacji o książce*/
{
    cout << "\nimie autora: ";
    cin >> dane.imie;
    cout << "nazwisko autora: ";
    cin >> dane.nazwisko;
    cout << "tytul ksiazki: ";
    cin >> dane.tytul;
    cout << "rok wydania: ";
    cin >> dane.rokwydania;
    cout << "numer wydania: ";
    cin >> dane.nrwydania;
}
void WYSWIETL_dane(T_dane_ksiazki dane) /*wczytanie informacji o książce*/
{
    cout << "\nimie autora: " << dane.imie;
    cout << "\nnazwisko autora: " << dane.nazwisko;
    cout << "\ntytul ksiazki: " << dane.tytul;
    cout << "\nrok wydania: " << dane.rokwydania;
    cout << "\nnumer wydania: " << dane.nrwydania << "\n";
}

const int N = 3;
int Zapytajka()
{
    cout << N<< "\n";
    return 1;
}
int main()
{
    T_dane_ksiazki daneq[N];
    Zapytajka();
    cout << "Podaj informacje o ksiazkach: \n";
    for (int i = 0; i<N; i++)
    {
        WCZYTAJ_dane(daneq[i]);
    }
    cout << "\n\nInformacje o ksiazkch: \n";
    for (int i = 0; i<N; i++)
    {
        WYSWIETL_dane(daneq[i]);

    }
    cout << "\nKoniec programu. Nacisnij ENTER";
    cin.ignore(); cin.get();
    return 1;
}

2 个答案:

答案 0 :(得分:2)

C ++仅支持大小恒定的数组。但是,如果您想要一个非常量的大小,可以使用专为此目的而设计的vector

示例:

#include <vector>

...

int main()
{
    Zapytajka();
    cout << "Podaj informacje o ksiazkach: \n";
    int n;
    cin >> n;
    std::vector<T_dane_ksiazki> daneq(N); // moved here and modified
    for (int i = 0; i<N; i++)
    {
        WCZYTAJ_dane(daneq[i]);
    }
    ...
}

我将数组更改为vector,并在确定n的值后将其定义移至N。我还将n更改为a{ outline: medium none !important; } ,因为它不再是常量,将小写名称分配给变量是一种常见的约定。

答案 1 :(得分:1)

编辑:我错过了这是一个C ++问题。 C ++的答案是你应该使用C ++容器,可能是一个向量。这些容器是C ++中在C中引入的可变长度数组在C ++中不存在的原因:它们并不真正需要它们。 (讨论是否引入类似的东西,但它对类型系统有非常重要的含义。)

您可以在C99程序中使用可变长度数组(对于gcc:使用&#34编译; -std = c99&#34;)。也就是说,你可以使N成为非const,程序仍然应该编译并正常运行(我没有检查每个细节,但它看起来非常简单。)

在99 C之前,您必须使用malloc动态分配,或者只需定义一个足以容纳最大可能数字的数组,并仅使用其中的一部分。