Программирование
|
|
ElfDragon | Дата: Воскресенье, 2008-10-05, 0:45 AM | Сообщение # 31 |
 Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
| =) Это я даже не проверял.. вчера на форуме за пару минут накатал и все)))
...А потом он пыхнул и ушел...
|
|
| |
ElfDragon | Дата: Воскресенье, 2008-10-05, 11:08 PM | Сообщение # 32 |
 Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
| Макс.. а каким образом можно сделать так, чтобы с использованием функции getch() для заполнени массива, при нажатии Энтера ввод прекращался и запрашивалась следующаая строка? з.ы. при вводе ентера курсор прыгает в начало строки)) з.з.ы Уже неактуально, сделал по другому =)))) з.з.з.ы Макс, а как выделить память под строку с n элементами, если нам это n неизвестно сначала, а узнается уже после ввода строки? и еще длина строки в 16 символов установилась.. ептель.. хз что делать) и realloc.. непонятен)
...А потом он пыхнул и ушел...
Сообщение отредактировал ElfDragon - Понедельник, 2008-10-06, 11:33 PM |
|
| |
MADMAX | Дата: Вторник, 2008-10-07, 0:03 AM | Сообщение # 33 |
 Генерал-майор
Группа: Модераторы
Сообщений: 320
Статус: Offline
| В C память выделяется при помощи функций: malloc, calloc, realloc. А в С++ при помощи: new. Освобождается память при помощи: free. Читай умные книжки Есть несколько способов выделять память для ввода. Во первых ты можеш сразу спросить сколько надо вводить символов и выделить необходимую память. А во вторых ты можеш при переполнении определённого буфера, выделять дополнительные объёмы памяти (увеличивая исходный буфер).
Смотрю на мир...
Сообщение отредактировал MADMAX - Вторник, 2008-10-07, 0:04 AM |
|
| |
ElfDragon | Дата: Вторник, 2008-10-07, 0:06 AM | Сообщение # 34 |
 Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
| Ммм.. вся задачко в том, что при освобождении памятис с помощью free прога вылетает :// Хм.. с памятью я выделяю память под 1 char, а если не хватает, я по одной области памяти размера char прибавляю :// Или не по одной)) Переделал... Но при выделении памяти для строки содержащей сумму дву строк, заданных ранее.. пишет что Heap corruption detected Больше не пишет.. но размер результ. строки 24))
...А потом он пыхнул и ушел...
Сообщение отредактировал ElfDragon - Вторник, 2008-10-07, 0:17 AM |
|
| |
MADMAX | Дата: Вторник, 2008-10-07, 5:45 PM | Сообщение # 35 |
 Генерал-майор
Группа: Модераторы
Сообщений: 320
Статус: Offline
| Для работы с памятью используют указатели (char *ch;). Если проблему ещё не решил, то покажи код, может чем помогу. А так трудно тебе что-нибудь посоветовать.
Смотрю на мир...
|
|
| |
ElfDragon | Дата: Вторник, 2008-10-07, 9:28 PM | Сообщение # 36 |
 Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
| Code int Length(char *Str) { i=0; while(Str[i]!='\0') { i++; } return i; } Это подсчет длины.. Code void Concat (char *Str1, char *Str2) {
int j=0,r=0; while(Str1[r]!='\0') { Str_result[r]=Str1[r]; r++; } while(Str2[j]!='\0') { Str_result[r]=Str2[j]; r++; j++; } } Связь строк... Code Str = (char*)malloc(sizeof(char));
Strcl = (char*)malloc(sizeof(char));
printf("Please, input first string\n"); gets(Str); if (Str == NULL) Str = (char*)realloc (Str, Length(Str)*sizeof(char)); printf("Please, input second string\n"); if (Strcl == NULL) Strcl = (char*)realloc (Strcl, Length(Strcl)*sizeof(char)); gets(Strcl); Str_result = (char*)malloc(sizeof(char)*(Length(Str)+Length(Strcl))) Выделение памяти.. Вот результирующая строка - всегда 24 символа теперь(( Хотя остальные считаются нормально
...А потом он пыхнул и ушел...
Сообщение отредактировал ElfDragon - Вторник, 2008-10-07, 10:04 PM |
|
| |
ElfDragon | Дата: Среда, 2008-10-08, 0:29 AM | Сообщение # 37 |
 Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
| int main() { bool flag = true; int a; Str = (char*)malloc(sizeof(char)*20); Strcl = (char*)malloc(sizeof(char)*20); Str_result = (char*)malloc(sizeof(char)*40); printf("Please, input first string\n"); gets(Str); printf("Please, input second string\n"); printf("Length of first string = %d\n", Length(Str)); for (i=0; i<(10); i++) { printf("%d ", Str[i]); } printf("Length of second string = %d\n", Length(Strcl)); printf("Length of result string = %d\n", Length(Str_result)); printf("Result string: "); printf(Str_result); getch(); return 0; }
...А потом он пыхнул и ушел...
|
|
| |
MADMAX | Дата: Среда, 2008-10-08, 1:02 AM | Сообщение # 38 |
 Генерал-майор
Группа: Модераторы
Сообщений: 320
Статус: Offline
|
Смотрю на мир...
|
|
| |
ElfDragon | Дата: Среда, 2008-10-08, 9:39 PM | Сообщение # 39 |
 Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
| Code int Ent_str (char *Str1, char *Str2) { int j=0, Counter=0; if (Length(Str1)<Length(Str2)) { return Counter; } else { if (strstr (Str1, Str2)==NULL) { return Counter=0; } else { do{ Str1 = strstr (Str1, Str2); do{ Str1[j]=Str1[j+Length(Str2)]; j++; }while(j!=Length(Str1)); Counter+=1; }while(Str1!=0); } }
return Counter; } Макс, эта функция в теории должна считать число входов одной строки в другую.. когда вход найден, мы слвигаем строку первую на длину того, тчто мы искали и поиск повторяется... Она все нормально работает для строк, не содержащих вхождений, но для тех, гдне они есть, проаг вылетает с ошбкой Access violation =((
...А потом он пыхнул и ушел...
|
|
| |
MADMAX | Дата: Четверг, 2008-10-09, 0:28 AM | Сообщение # 40 |
 Генерал-майор
Группа: Модераторы
Сообщений: 320
Статус: Offline
|
Смотрю на мир...
|
|
| |
ElfDragon | Дата: Четверг, 2008-10-09, 7:08 PM | Сообщение # 41 |
 Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
| Хе, сейчас с сопроцессором закончцу пойдет графика!)) Мне обеспечены бессонные недели)) Пля, очереданя функция не пашет(( Code int Compare(char* str1, char* str2) { i=0; j=0; char a; for (i=0; i!=Length(str1)-1; i++) { for (str1; str1[j]!='\0'; j++); { if (str1[j]>str1[j+1]) { a=str1[j]; str1[j]=str1[j+1]; str1[j+1]=a; } } } i=j=0; for (i=0; i!=Length(str2)-1; i++){ for (str2; str2[j]!='\0'; j++); { if (str2[j]>str2[j+1]) { a=str2[j]; str2[j]=str2[j+1]; str2[j+1]=a; } } } if (str1[0]<str2[0]) { return -1; } if (str1[0]>str2[0]) { return 1; } else return 0; } эта сцука прекрасно пашет в дев-спп, но в студии откаывается работать((( по какой логике работыет эта студия?(( так// заработало// через ж(
...А потом он пыхнул и ушел...
Сообщение отредактировал ElfDragon - Пятница, 2008-10-10, 1:39 AM |
|
| |
ElfDragon | Дата: Понедельник, 2008-10-13, 7:13 PM | Сообщение # 42 |
 Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
| Макс, а как запсиать в файл строку+число если обе вещи - указатели, и память под них выделяется динамически? Со строкой все нормалньо, а с числом вылетает с ошибкой акецесс виолатион... Code int main () { FILE *file; char *file_name = "Myfile.txt"; char *Str; int Number; Str = (char*)malloc(sizeof(char)); printf ("Input text\n"); gets(Str); if (Str == NULL) { Str = (char*)realloc (Str, Length(Str)*sizeof(char)); } if ((file = fopen(file_name, "wb")) == NULL) { printf("Impossible to open file!\n"); exit(1); } fwrite(Str, sizeof(char)*Length(Str), Length(Str), file); /*printf("Input number\n"); scanf("%d", &Number); fwrite(&Number, sizeof(int), 1, file);*/ fclose(file); fopen (file_name, "rb"); rewind(file); while (feof (file)==0) { printf("%c", getc(file)); } //printf("%d", fread(Str, sizeof(char), sizeof(char)*Length(Str), file)); //printf("%d", fread(&Number, sizeof(int), 1, file));
fclose (file); getch(); return 0; } оан снвоа неправильно выводит строку на жкран(( А циферук выводит типерь)) но со строкой - лажа(((
...А потом он пыхнул и ушел...
Сообщение отредактировал ElfDragon - Понедельник, 2008-10-13, 11:52 PM |
|
| |
ElfDragon | Дата: Среда, 2008-10-15, 9:09 PM | Сообщение # 43 |
 Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
| Макс.. а что такое открытие файла с ключем? Кстати у меня идея появилась.. а сесли сделать не ввод строка+чсило.. а ввод строки и потом дописывание к ней в конец введенного числа?чтобы в роезультате в файл записывалась одна переменная, а не две йа дибил!! у меня файл как текстовый объявлен, а я с ним как с бинарным работаю( Code void Input_in_file () { char *Str1; int Number_temp; if ((file = fopen(file_name, "ab")) == NULL) { printf("Impossible to open file!\n"); exit(1); } Str1 = (char*)malloc(sizeof(char)); printf ("Input text and number\n"); fscanf (stdin, "%s%d", Str, &Number_temp); if (Str1 == NULL) { Str1 = (char*)realloc (Str1, Length(Str1)*sizeof(char)); } fprintf (file, "%s %d", Str1, Number_temp); fclose(file); } Макс, эта функция пишет в файл редкостную ересь.. хотя аналогичная на ввод первой строки.. пишет все ок(( прога теперь не пишет ничего в файл!(( ибо дял вывода использую fgets()... Таак... теперь вместо цифры в строку записываептся квдартег))
...А потом он пыхнул и ушел...
Сообщение отредактировал ElfDragon - Четверг, 2008-10-16, 11:11 PM |
|
| |
MADMAX | Дата: Суббота, 2008-10-18, 11:00 PM | Сообщение # 44 |
 Генерал-майор
Группа: Модераторы
Сообщений: 320
Статус: Offline
| Сорри что меня давно небыло. Я заигрался Щас гамаю в Л2 на ПвП3 сервере la2world.ru Если проблема ещё актуальна, то меня смущает строка: fscanf (stdin, "%s%d", Str, &Number_temp); Попробуй сделать проще, со статической памятью и сначала отдельно с цифрой, а потом отдельно со строкой. P.S. Открытие файла с ключом, я предполагаю что: fopen(file_name, "ab")), где "ab" - ключ. P.S.S. Кстати попробуй ещё после записи закрыть файл, а при чтении открывать его снова.
Смотрю на мир...
Сообщение отредактировал MADMAX - Суббота, 2008-10-18, 11:02 PM |
|
| |
ElfDragon | Дата: Воскресенье, 2008-10-19, 2:27 AM | Сообщение # 45 |
 Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
| Ммм.. функцию со фсканф (стдин ...) была списана из Шмидта :/ Сама функция работает но при изменениии - вылезает херь с квадратом закрытие - открытие.. у меня функции все функции так напсианы =)
...А потом он пыхнул и ушел...
|
|
| |