Все мои выходные данные равны 0, поэтому ни одна из считываемых данных не сохраняется, и я не знаю, почему. Необходимы з ⇐ C++
Все мои выходные данные равны 0, поэтому ни одна из считываемых данных не сохраняется, и я не знаю, почему. Необходимы з
Ниже я предоставил желаемый код out, main.cpp, Support.cpp и Support.h. Я в основном пытаюсь извлечь данные о погоде, а затем вывести их. Я изменил предыдущий код, который я написал, который использовал векторы, чтобы теперь вместо этого использовать одинарные связанные списки. Мой векторный код выдавал неправильные данные, но в большинстве случаев он выдавал данные, которые не были нулями. Теперь выходные данные — все нули, кроме одного месяца. Строки в файле main.cpp с комментарием «удалить после завершения отладки» следует закомментировать при запуске с использованием командной строки и конвейерной обработки в файле csv. Я использую их только тогда, когда использую отладчик VSCode и прохожу программу. Это самый простой способ передать файл csv без редактирования файла json. Любые ссылки на Prog1a относятся к предыдущему коду, в котором вместо списков использовались векторы. Любая помощь очень ценится. Я думаю, что проблема связана с моей функцией Insert(), определенной в Support.cpp, но я не уверен. Я пытался изменить это, но все, что происходит, — это отсутствие вывода или вывод со всеми нулями, за исключением одного месяца нужного города.
Желаемый результат
unix> ./main Ноксвилл < Weather_TN.csv ------------------------------------------ Ноксвилл, Теннесси (TYS) ------------------------------------------ Янв: 4,21 0,70 1,45 0,00 : 37 46 27 фев: 7.12 1.78 3.09 0.14 : 41 47 29 Март: 2,32 0,58 1,13 0,28 : 54 63 43 Апр: 1,78 0,44 0,71 0,26 : 58 67 50 Май: 4,04 0,81 1,42 0,19 : 67 72 63 Июнь: 4.17 1.04 3.11 0.00 : 77 80 74 Июль: 4,80 0,96 3,71 0,00 : 81 84 80 Август: 2,33 0,58 1,00 0,10 : 81 83 80 Сен: 0,91 0,23 0,56 0,00 : 78 79 77 Окт: 0,18 0,04 0,14 0,00 : 65 68 64 Ноябрь: 0,27 0,07 0,16 0,00 : 53 64 46 Дек: 5,51 1,38 2,28 0,64 : 41 43 41 main.cpp
#include #include #include использование пространства имен std; #include "Support.h" #include "Support.cpp" void extract_values(строка &текст, местоположение &n_station, данные &n_data) { //**См. Prog1a for (int i = 0; i < text.size(); i++) { если (текст == ' ') { текст[я] = '_'; } если (текст == ',') { текст[я] = ''; } } std::stringstream ss(текст); сс >> n_data.month >> n_station.city >> n_station.state >> n_station.geocode >> n_data.precip >> n_data.temp; } int main(int argc, char *argv[]) { freopen("weather_TN.csv", "r", stdin); //УДАЛИТЬ ПОСЛЕ ЗАВЕРШЕНИЯ ОТЛАДКИ if (argc != 1 && argc != 2) { cerr next; заголовок->следующий = заголовок->следующий->следующий; удалить температуру; } удалить голову; } void list::insert(const location &loc, const data &dat) { // Реализуем логику вставки списка узел *newNode = новый узел (loc); newNode->следующий = nullptr; узел *текущий = голова; // Обрабатываем случай, когда список изначально пуст if (текущий->следующий == nullptr || loc < текущий->следующий->станция) { новыйузел->следующий = текущий->следующий; текущий-> следующий = новый узел; // Обновляем данные о погоде для новой станции новыйУзел->N[dat.month - 1] = 1; newNode->total_precip[dat.month - 1] = dat.precip; newNode->max_precip[dat.month - 1] = dat.precip; newNode->min_precip[dat.month - 1] = dat.precip; newNode->total_temp[dat.month - 1] = dat.temp; newNode->max_temp[dat.month - 1] = dat.temp; newNode->min_temp[dat.month - 1] = dat.temp; возвращаться; } while (текущий->следующий != nullptr) { if (loc следующая->станция) { новыйузел->следующий = текущий->следующий; текущий-> следующий = новый узел; // Обновляем данные о погоде для новой станции новыйУзел->N[dat.month - 1] = 1; newNode->total_precip[dat.month - 1] = dat.precip; newNode->max_precip[dat.month - 1] = dat.precip; newNode->min_precip[dat.month - 1] = dat.precip; newNode->total_temp[dat.month - 1] = dat.temp; newNode->max_temp[dat.month - 1] = dat.temp; newNode->min_temp[dat.month - 1] = dat.temp; возвращаться; } текущий = текущий-> следующий; } } /* void list::insert(const location &loc, const data &dat) { // Реализуем логику вставки списка узел *newNode = новый узел (loc); newNode->следующий = nullptr; узел *текущий = голова; while (текущий->следующий != nullptr) { if (loc следующая->станция) { новыйузел->следующий = текущий->следующий; текущий-> следующий = новый узел; возвращаться; } текущий = текущий-> следующий; } // Если станцию нужно вставить в конец //текущий->следующий = newNode; } */ void list::node::print_station() { std::string header = "------------------------------------------" ; std::string location_info = Station.city + ", " + Station.state + " (" + Station.geocode + ")"; printf("%s\n%s\n%s\n", header.c_str(), location_info.c_str(), header.c_str()); } недействительный список::node::print_data() { std::vectormonths = {"Январь", "Фев", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", " Октябрь", "Ноябрь", "Декабрь"}; для (int я = 0; я следующий; while (текущий != nullptr) { // Проверяем, совпадает ли target_location или target_location имеет значение NULL (распечатать все) if (target_location == nullptr || current->station.geocode == target_location) { текущий->print_station(); текущий->print_data(); } текущий = текущий-> следующий; } } // Определить оператор «меньше» для объектов местоположения bool location::operator
Ниже я предоставил желаемый код out, main.cpp, Support.cpp и Support.h. Я в основном пытаюсь извлечь данные о погоде, а затем вывести их. Я изменил предыдущий код, который я написал, который использовал векторы, чтобы теперь вместо этого использовать одинарные связанные списки. Мой векторный код выдавал неправильные данные, но в большинстве случаев он выдавал данные, которые не были нулями. Теперь выходные данные — все нули, кроме одного месяца. Строки в файле main.cpp с комментарием «удалить после завершения отладки» следует закомментировать при запуске с использованием командной строки и конвейерной обработки в файле csv. Я использую их только тогда, когда использую отладчик VSCode и прохожу программу. Это самый простой способ передать файл csv без редактирования файла json. Любые ссылки на Prog1a относятся к предыдущему коду, в котором вместо списков использовались векторы. Любая помощь очень ценится. Я думаю, что проблема связана с моей функцией Insert(), определенной в Support.cpp, но я не уверен. Я пытался изменить это, но все, что происходит, — это отсутствие вывода или вывод со всеми нулями, за исключением одного месяца нужного города.
Желаемый результат
unix> ./main Ноксвилл < Weather_TN.csv ------------------------------------------ Ноксвилл, Теннесси (TYS) ------------------------------------------ Янв: 4,21 0,70 1,45 0,00 : 37 46 27 фев: 7.12 1.78 3.09 0.14 : 41 47 29 Март: 2,32 0,58 1,13 0,28 : 54 63 43 Апр: 1,78 0,44 0,71 0,26 : 58 67 50 Май: 4,04 0,81 1,42 0,19 : 67 72 63 Июнь: 4.17 1.04 3.11 0.00 : 77 80 74 Июль: 4,80 0,96 3,71 0,00 : 81 84 80 Август: 2,33 0,58 1,00 0,10 : 81 83 80 Сен: 0,91 0,23 0,56 0,00 : 78 79 77 Окт: 0,18 0,04 0,14 0,00 : 65 68 64 Ноябрь: 0,27 0,07 0,16 0,00 : 53 64 46 Дек: 5,51 1,38 2,28 0,64 : 41 43 41 main.cpp
#include #include #include использование пространства имен std; #include "Support.h" #include "Support.cpp" void extract_values(строка &текст, местоположение &n_station, данные &n_data) { //**См. Prog1a for (int i = 0; i < text.size(); i++) { если (текст == ' ') { текст[я] = '_'; } если (текст == ',') { текст[я] = ''; } } std::stringstream ss(текст); сс >> n_data.month >> n_station.city >> n_station.state >> n_station.geocode >> n_data.precip >> n_data.temp; } int main(int argc, char *argv[]) { freopen("weather_TN.csv", "r", stdin); //УДАЛИТЬ ПОСЛЕ ЗАВЕРШЕНИЯ ОТЛАДКИ if (argc != 1 && argc != 2) { cerr next; заголовок->следующий = заголовок->следующий->следующий; удалить температуру; } удалить голову; } void list::insert(const location &loc, const data &dat) { // Реализуем логику вставки списка узел *newNode = новый узел (loc); newNode->следующий = nullptr; узел *текущий = голова; // Обрабатываем случай, когда список изначально пуст if (текущий->следующий == nullptr || loc < текущий->следующий->станция) { новыйузел->следующий = текущий->следующий; текущий-> следующий = новый узел; // Обновляем данные о погоде для новой станции новыйУзел->N[dat.month - 1] = 1; newNode->total_precip[dat.month - 1] = dat.precip; newNode->max_precip[dat.month - 1] = dat.precip; newNode->min_precip[dat.month - 1] = dat.precip; newNode->total_temp[dat.month - 1] = dat.temp; newNode->max_temp[dat.month - 1] = dat.temp; newNode->min_temp[dat.month - 1] = dat.temp; возвращаться; } while (текущий->следующий != nullptr) { if (loc следующая->станция) { новыйузел->следующий = текущий->следующий; текущий-> следующий = новый узел; // Обновляем данные о погоде для новой станции новыйУзел->N[dat.month - 1] = 1; newNode->total_precip[dat.month - 1] = dat.precip; newNode->max_precip[dat.month - 1] = dat.precip; newNode->min_precip[dat.month - 1] = dat.precip; newNode->total_temp[dat.month - 1] = dat.temp; newNode->max_temp[dat.month - 1] = dat.temp; newNode->min_temp[dat.month - 1] = dat.temp; возвращаться; } текущий = текущий-> следующий; } } /* void list::insert(const location &loc, const data &dat) { // Реализуем логику вставки списка узел *newNode = новый узел (loc); newNode->следующий = nullptr; узел *текущий = голова; while (текущий->следующий != nullptr) { if (loc следующая->станция) { новыйузел->следующий = текущий->следующий; текущий-> следующий = новый узел; возвращаться; } текущий = текущий-> следующий; } // Если станцию нужно вставить в конец //текущий->следующий = newNode; } */ void list::node::print_station() { std::string header = "------------------------------------------" ; std::string location_info = Station.city + ", " + Station.state + " (" + Station.geocode + ")"; printf("%s\n%s\n%s\n", header.c_str(), location_info.c_str(), header.c_str()); } недействительный список::node::print_data() { std::vectormonths = {"Январь", "Фев", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", " Октябрь", "Ноябрь", "Декабрь"}; для (int я = 0; я следующий; while (текущий != nullptr) { // Проверяем, совпадает ли target_location или target_location имеет значение NULL (распечатать все) if (target_location == nullptr || current->station.geocode == target_location) { текущий->print_station(); текущий->print_data(); } текущий = текущий-> следующий; } } // Определить оператор «меньше» для объектов местоположения bool location::operator
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение