|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - заполнение массива |
|
|
C/C++ - заполнение массива
|
Новый участник Сообщения: 33 |
Профиль | Отправить PM | Цитировать Столкнулся с проблемой:
неком исходном файле содержатся данные в виде: пн 23.3 55.8 32.5 вт 54.3 23.4 сб 45.7.78.1 или просто: 65.3 74.4 85.2 23.4 54.3 и т.д. нужно заполнить массив double [7][] в итоге массив содержит измерения погоды (строки - дни недели. столбцы - измерения) Вопрос: как заполнить такой массив? Как узнать длину каждой строки массива? |
|
Отправлено: 17:08, 14-11-2009 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать появилась идея - можно запрашивать кол-во столбцов в самом начале.
примерно то, что родилось в голове: #include<stdio.h> #include <conio.h> void main() { #define NR 7; #define NC = a; FILE *f; int a; printf("Какое кол-во измерений в день было произведено?(1 2 4 и т.д.)\n"); scanf("%i", &a); float weather[NR][NC]; If ((f = fopen("weather.txt", "rt")) == NULL) { printf ("не удалось открыть файл \n" getch(); return; } int r,c; // номер строки и столбца for (r=0; r < NR; r++) { for(c = 0; c < NC; c++) { fscanf(f, "%f", wether[r][c]); } } fclose (f); } 2. Возможно ли обойтись без этой переменной "а"? Чтобы прежде чем заполнять массив, допустим посчитать кол-во элементов первой строки, содержащейся в файле? 3. Каким образом в данной ситуации использовать средства ввода/вывода с++ (cin/cout) 4. Будет ли правильно заполнен массив, если данные в файле выглядят примерно так: 65.4 -98.7 63.5 -46.5 12.3 38.7 38.7 30.8 65.7 74.8 44.5 75.0 -87.0 28.7 34.7 65.4 98.7 -63.5 -46.5 -12.3 38.7 387 30.8 65.7 74.8 -44.5 -75.0 -87.0 28.7 34.7 24.3 70.8 73.2 24.2 09.8 т.е. данные разделены пробелом, присутствуют как положительные. так и отрицательные значения |
Последний раз редактировалось Lisiy_egik, 14-11-2009 в 23:34. Причина: Слишком коряво в первый раз написал Отправлено: 19:09, 14-11-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать Lisiy_egik, можно задать структуру файла Бинарные файлы
Единственное что по данной структуре должен быть и заполнен файл, так что если в блокноте где-то пробел был добавлен, программа может с ошибкой считать файл. В идеале нужно что-б в самой проге и была произведена запись в файл. |
Отправлено: 19:30, 14-11-2009 | #3 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать решил посмотреть как заполняется массив и вот что вышло:
#include "stdio.h" #include "conio.h" #include "rus8.h" void main() { rus(); #define NR 7 #define NC 3 FILE *f; float weather[NR][NC]; int r = 0, c = 0; //printf("Введите кол-во измерени в сутки:"); //scanf("%i", &a); if ((f=fopen("weather.txt", "rt"))==NULL) { printf("Файл с исходными данными не найден"); getch(); return; } for (r=0; r < NR; r++) { for(c = 0; c < NC; c++) { fscanf(f, "%f", weather[r][c]); } } fclose (f); printf("Данные, загруженные из файла в массив:\n"); for(r = 0; r < NR; r++) { for(c = 0; c < NC; c++) { printf("%5.1f", weather[r][c]); } } printf("\n \n я завершения нажминие Ввод"); getch(); } #include "stdio.h" #include "conio.h" #include "rus8.h" void main() { rus(); #define NR 7 #define NC 3 FILE *f; float weather[NR][NC]; int r = 0, c = 0; //printf("Введите кол-во измерени в сутки:"); //scanf("%i", &a); if ((f=fopen("weather.txt", "rt"))==NULL) { printf("Файл с исходными данными не найден"); getch(); return; } while(r < NR) { while(c<NC) { fscanf(f, "%f", weather[r][c]); } c++; } r++; fclose (f); printf("Данные, загруженные из файла в массив:\n"); for(r = 0; r < NR; r++) { for(c = 0; c < NC; c++) { printf("%5.1f", weather[r][c]); } } printf("\n \n я завершения нажминие Ввод"); getch(); } 23.4 55.2 34.5 54.4 35.6 79.8 45.9 65.8 76.7 23.1 45.2 56.3 34.4 98.5 56.6 12.3 23.2 34.1 98.4 87.3 76.2 При компиляции ошибок нет, а вот при запуске выдает: Необработанное исключение в "0x691c936c (msvcr90d.dll)" в "p2e1.exe": 0xC0000005: Нарушение прав доступа при записи "0x80000000". В чем моя ошибка? |
Последний раз редактировалось Lisiy_egik, 15-11-2009 в 00:54. Причина: небольшая описка Отправлено: 00:53, 15-11-2009 | #4 |
Ветеран Сообщения: 514
|
Профиль | Отправить PM | Цитировать Цитата Lisiy_egik:
У меня есть прога похожего плана. Описание программы. Из файла заполненного разными символами выбрать все восеьмеричные комбинации цифр (например "hfdhfhdj45777789rerer jjjj 75 uhh78900987" выбираем 45777789 и 78900987). Могу текст проги выложить, только там нет комментриев. |
||
Отправлено: 12:48, 15-11-2009 | #5 |
Ветеран Сообщения: 514
|
Профиль | Отправить PM | Цитировать так наверное проще всего
for(r = 0; r < NR; r++) fscanf(f,"%f %f %f\n", weather[r][0], weather[r][1], weather[r][2]); если данные всегда вида: 23.4 55.2 34.5 54.4 35.6 79.8 45.9 65.8 76.7 23.1 45.2 56.3 34.4 98.5 56.6 12.3 23.2 34.1 98.4 87.3 76.2 |
Отправлено: 13:04, 15-11-2009 | #6 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Цитата Ferum01:
|
|
Отправлено: 13:11, 15-11-2009 | #7 |
Ветеран Сообщения: 514
|
Профиль | Отправить PM | Цитировать Тогда примерно так:
while(!feof(f)) { do { fscanf(fp1, "%c", &sim[eatt]); if (sim[eatt]=='\n') break; do { if ( sim[eatt]=='0' || sim[eatt]=='1' || sim[eatt]=='2' || sim[eatt]=='3' || sim[eatt]=='4' || sim[eatt]=='5' || sim[eatt]=='6' || sim[eatt]=='7' || sim[eatt]=='8' || sim[eatt]=='9' || sim[eatt]=='.') { eatt++; fscanf(f, "%c", &sim[eatt]); } else break; } while (true); weather[r][]=sim; r++; // изначально так было strcpy(number1[num1],sim); можно ли символьную переменную целой присваивать не помню... eatt=0; } while (!feof(f)); fscanf(f, "\n"); } fclose(f); |
Последний раз редактировалось Drongo, 15-11-2009 в 14:50. Причина: тег - # Отправлено: 13:53, 15-11-2009 | #8 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Цитата Ferum01:
|
|
Отправлено: 14:00, 15-11-2009 | #9 |
Ветеран Сообщения: 514
|
Профиль | Отправить PM | Цитировать Цитата Lisiy_egik:
Количество элементов в строке определяет "eatt" ее наверное надо записать в дополнительный массив массива weather. |
|
Отправлено: 14:10, 15-11-2009 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Заполнение FORM в IE | HORRIBLE | AutoIt | 5 | 10-09-2009 23:46 | |
Интерфейс - [решено] Не показывается заполнение HDD | JJKey | Microsoft Windows Vista | 2 | 20-06-2009 21:04 | |
Ошибка - Быстрое заполнение диска С: | baltiec | Microsoft Windows 2000/XP | 1 | 17-01-2009 13:04 | |
Заполнение базы из браузера | Qwe1 | Вебмастеру | 6 | 19-02-2008 18:49 | |
Delphi - Заполнение БД в Delphi. SOS!!! | Voprosik | Программирование и базы данных | 4 | 13-11-2005 21:26 |
|