Проблема с кодом в том виде, в каком он есть сейчас, заключается в том, что ни inval
, ни inarray
не инициализируются, и, таким образом, вы читаете до 1000 байтов в какую-то произвольную ячейку памяти.
for(int lpcnt=0;lpcnt< tmp;lpcnt++)
{
fgets(inarray,1000,stdin);
}
Вероятно, это также не то, что вам нужно (даже если inarray
был инициализирован), поскольку оно будет перезаписывать содержимое на каждой итерации.
fgets(inval,1000,stdin);
int tmp = atoi(inval);
Сам по себе не так, но вам, вероятно, лучше использовать fscanf(stdin, "%d", &tmp)
(если вы кодировали C, читайте дальше).
Многие из этих проблем связаны с тем, что ваш код очень похож на C. Нет никаких причин (если это не домашняя работа) самостоятельно управлять таким количеством выделений в C ++. Вот небольшой пример, который показывает более C ++ - способ сделать некоторые вещи:
#include <iostream>
#include <vector>
#include <string>
int main()
{
std::cout << "Number of elements to read? " << std::flush;
// How many lines should we read?
int count;
if (!(std::cin >> count) || count <= 0) {
std::cout << "Invalid element count" << std::endl;
return 1;
}
std::string line;
std::vector<std::string> lines;
// Read until EOF (to get newline from above reading)
if (!std::getline(std::cin, line)) {
std::cout << "Error reading line" << std::endl;
return 1;
}
// Read lines one at a time adding them to the 'lines' vector
for (int i = 0; i < count; i++) {
if (!std::getline(std::cin, line)) {
std::cout << "Error reading line" << std::endl;
return 1;
}
lines.push_back(line);
}
// Echo the lines back
for (std::vector<std::string>::const_iterator line_iterator = lines.begin(); line_iterator != lines.end(); ++line_iterator) {
std::cout << *line_iterator << '\n';
}
return 0;
}