要求用户输入常量
Asking user for 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 << "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 动态分配,或者简单地定义一个足够大的数组,可以容纳最大的可以想象的数字,并且只使用其中的一部分。
相关文章:
- #定义c-预处理器常量..我做错了什么
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 检查输入 std::array 指针数据是否等于某个常量数组
- isdigit() 和 isalnum() 给出错误,因为输入是一个常量字符并且无法转换。其他可能查看输入是否为数字的方法?
- boost::split会在输入字符串不是常量时更改输入字符串吗?
- 打印匹配序列的编号,在用户给定的输入中为常量输入
- 输入迭代器必须具有常量解引用运算符吗
- 输入参数类型"常量双 *&"是什么意思?
- C++常量字符*输入
- 为const输入参数传递非常量对象
- 如何通过接受用户输入来设置类的常量成员值
- 我想将一个常量字符串写入包含另一个输入数据块的文件
- 要求用户输入常量
- 常量变量乘以用户输入
- 获取 boost::p rogram_options 将输入视为常量字符*而不是 std::string
- 为什么 std::make_pair 是按值而不是常量引用获取输入
- 有没有办法声明函数的输入参数必须是常量引用
- 为什么很少有人输入常量正确的代码?将const-correct代码编译更好/更快
- 以常量引用作为输入的函数
- 如何输入int64_t / uint64_t常量