有朋友的代码。它有效,但我们想问我们的用户他想要输入多少次信息。更简单,我们不知道如何向我的用户询问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;
}
答案 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动态分配,或者只需定义一个足以容纳最大可能数字的数组,并仅使用其中的一部分。