要求用户输入常量

Asking user for const

本文关键字:常量 输入 用户      更新时间:2023-10-16

有我朋友的代码。它有效,但我们想问我们的用户他想输入信息多少次。更简单,我们不知道如何向我的用户询问 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 << "nnInformacje 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;
}

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,因为它不再是常量,并且将小写名称分配给变量是一种常见的约定。

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

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

在 99 之前的 C 中,您必须使用 malloc 动态分配,或者简单地定义一个足够大的数组,可以容纳最大的可以想象的数字,并且只使用其中的一部分。