Данные из массива всегда разные. Почему?
- Войдите на сайт для отправки комментариев
Втр, 12/05/2015 - 11:15
Делаю небольшой проект по управлению пивоварней. Рецепты хранятся на sd карте в таком виде -
3,IPA,62,72,82,3,3,3,8,3,2,5,7;
3,STAUT,32,43,62,10,25,30,60,3,60,90,95;
5,BITTER,30,40,50,60,70,10,20,30,40,50,60,3,60,90,95;
3,PORTER,32,45,72,10,25,30,30,2,10,20;
.....
А так я его заношу в массив
char *recepies[30][30]; void setup() { Serial.begin(9600); .... SD_recepies() ; //проверка №1 for (int j=0; j <10 ; j++) { Serial.print(recepies[j][0]); Serial.print("-") ;Serial.print(recepies[j][1]);Serial.print("-") ;Serial.println(recepies[j][2]); } } void SD_recepies() { String stringOne = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,;"; int q=0; int t=0; int h=0; char symbol2 = 0; char array[10]; File configFile = SD.open("recepies.txt"); if (configFile) { while (configFile.available()) { symbol2 = configFile.read(); if (stringOne.indexOf(symbol2)!=-1) { if (symbol2==';' ) {t++; recepies[q][t]=array; q++; t=0; h=0 ; kol_receptov++; memset (array, 0, sizeof(array)); } else { if (symbol2==',') {recepies[q][t]=array; h=0; t++; memset (array, 0, sizeof(array)); } else {array[h]=symbol2; h++;} } } delay(1); } configFile.close(); } //проверка №2 for (int j=0; j <10 ; j++) { Serial.print(recepies[j][0]); Serial.print("-") ;Serial.print(recepies[j][1]);Serial.print("-") ;Serial.println(recepies[j][2]); } }
Делаю 2 проверки. Проверка №1 выдает иероглифы, 2-я выдает только знаки "-".
если добавить в строчки
if (symbol2==';' ) {t++; recepies[q][t]=array; q++; t=0; h=0 ; kol_receptov++; memset (array, 0, sizeof(array)); } ... if (symbol2==',') {recepies[q][t]=array; h=0; t++; memset (array, 0, sizeof(array)); }
после recepies[q][t]=array; следующее Serial.println(recepies[q][t]); то выводит все как надо.
Всю голову себе сломал..... Подскажите где я не то делаю...
после recepies[q][t]=array; следующее Serial.println(recepies[q][t]); то выводит все как надо.
Выводит данные из массива. Т.е.
3
IPA
62
72
82
3
3
3
и т.д.
Перебираю символы из файла. Складываю символы до появления запятой или ";" . После эти объедененные данные записывается в массив recepies где q- номер строки t-позиция в строке.
После эти объедененные данные записывается в массив recepies где q- номер строки t-позиция в строке.
Во-первых, научитесь форматировать код, для этого есть сочитание клавиш Ctrl+T.
Во-вторых, вам нужно изучить, что такое массив, что такое строки в си и как ими пользоваться.
Ну а в-третих, судя по коду вы выполняя это recepies[q][t]=array; пытаетесь запихнуть строку в один символ, на самом же деле передаете указатель (адрес) массива array элементу массива recepies[q][t]. И да, сразу после этого вы читаете recepies[q][t] по этому адресу находится массив array, но как только вы его переписываете новыми данными по этому адресу находятся уже новые данные, а когда вы выходите из функции SD_recepies(), то по этому адресу лежит "мусор".
Что бы присвоить данные одного массива другому существует, например, функции memcpy или strcpy. Но даже если вы это сделаете, так как я уже вам написал выше, что вы пытаетесь сделать, у вас в массиве recepies[q][t] будет сохраняться только первый символ массива array.
И в-четвертых, для чего вы вообще это делаете? Ведь вам же нужны числа как переменные, а не как строки, так вот лучше создайте массив переменных числового типа (например int) и сразу преобразовывайте строки в числа и складывайте в этот массив.
Огромное спасибо... Буду изучать матчасть.
Проштудировал всю инфу по массивам и строкам. Изменил код на следующий. Но опять не хочет работать так как я хочу
массив recpara вне функции доступен. массив recname чудит...
Код
выводит данные только из recpara
Проштудировал всю инфу по массивам и строкам.
массив recpara вне функции доступен. массив recname чудит...
Это не массив ,это вы чудите - что вы пытаетсь сделать обьявляя массив указателей
char
*recname[30];
и указателиchar
*buffer;
char
*p;
никак их не инициализируя?Первым в строке должно идти название рецепта.
Все отлично работает. Спасибо за советы и подсказки
Все отлично работает.
.......а пЫво-то варится уже ? :)
пока электронику не использую.... на газу все делаю....