|
Внимание! Теперь для входа на форум необходимо вводить единый пароль регистрации сервисов sibnet.ru!
Здравствуйте, гость ( Вход | Регистрация )
 Сейчас обсуждают
 
| |
Указатели, MS Visual Studio C++ |
|
|
HELKERN |
26.2.2010, 23:40
|

Ближе бандерлоги. Ближе.
Группа: Sibnet-club
Сообщений: 3 460
Регистрация: 22.2.2008
Из: Улан-Удэ
Пользователь №: 21 789
Репутация: 745

|
Задача состоит в том, что бы убрать из введенной строки все согласные буквы. Тока препод дал задание сделать через указатели доступ к массивам. С индексами я легко сделал) А вот с указателями в ступоре Код #include "stdafx.h" #include <conio.h> #include "string.h"
char A[15]="aieoquyAIEOQUY"; char B[10]; char C[10]; char *a,*b,*c; void main () { printf(" Vvedite stroky ne bolshe 10 simvolov\n"); gets(B); a=A; b=B; c=C; while(a!=a+13) { if(*b==*a) { c=b; a=A; b=b+1; } else a=a+1; } puts(C); getch(); } Прошу помощи
|
|
|
|
|
  |
Ответов(1 - 13)
HELKERN |
27.2.2010, 0:17
|

Ближе бандерлоги. Ближе.
Группа: Sibnet-club
Сообщений: 3 460
Регистрация: 22.2.2008
Из: Улан-Удэ
Пользователь №: 21 789
Репутация: 745

|
Цитата(mephisto @ 27.2.2010, 1:12)  Ну кто так пишет? Кто вам сказал, что main ничего не должна возвращать?
while(a!=a+13) - это что??? может всё же while(a!='\0') ? дальше вообще полный...
Давайте то, что работает с индексами, объясню как переделать на указатели
А смысл возвращать что то в main? Мы эту функцию нигде не вызываем, так и смысла нету что либо возвращать) а+13 это адрес последней букавки в массиве Цитата(mephisto @ 27.2.2010, 1:12)  может всё же while(a!='\0') ?
А разве адрес может равняться знаку \0 ? Код #include "stdafx.h" #include <conio.h> #include "string.h"
int i,j,a=0; char A[15]="aieoquyAIEOQUY"; char B[10]; char C[10]; void main () { printf(" Vvedite stroky ne bolshe 10 simvolov\n"); gets(B); for(i=0;i<strlen(B);i++) { for(j=0;j<strlen(A);j++) { if(B[i]==A[j]) { C[a]=B[i]; a++; } } } puts(C); getch(); } Сообщение отредактировал HELKERN - 27.2.2010, 0:19
|
|
|
|
mephisto |
27.2.2010, 9:42
|

ортодоксальный линуксоид
Группа: VIP
Сообщений: 7 724
Регистрация: 17.11.2007
Из: столицы вашей родины
Пользователь №: 10 849

|
Цитата(HELKERN @ 26.2.2010, 23:17)  А смысл возвращать что то в main? Мы эту функцию нигде не вызываем, так и смысла нету что либо возвращать) а+13 это адрес последней букавки в массиве А разве адрес может равняться знаку \0 ?
Не такой год я править не буду, из него конфетку уже не сделаешь  Держи пример, разбирайся. Код anton@bc /tmp $ cat 1.c #include <stdio.h>
int main() { char A[] = "Hellow world!\0"; int i; for (i = 0; *(A + i) != '\0'; i++) printf ("%c", *(A+i)); printf ("\n"); return 0; } anton@bc /tmp $ gcc -Wall 1.c && ./a.out Hellow world! anton@bc /tmp $
» Спасибо сказали: «
|
|
|
|
HELKERN |
27.2.2010, 10:05
|

Ближе бандерлоги. Ближе.
Группа: Sibnet-club
Сообщений: 3 460
Регистрация: 22.2.2008
Из: Улан-Удэ
Пользователь №: 21 789
Репутация: 745

|
Цитата(lunserv @ 27.2.2010, 3:06)  это нужно для аварийного завершения программы - если например тебе надо считать данные из файла, а файл не доступен, соответсвенно программа не может продолжить работу и в main() пишем return 1;
Ну у меня же не происходит чтения с файла, значит мне и возвращать ненадо. Цитата(lunserv @ 27.2.2010, 3:06)  попробуй так: *a == '\0';
Вот это другой разговор) А то mephisto предложил адрес сравнивать с символами \0 Цитата(lunserv @ 27.2.2010, 3:06)  смещение по указателю происходит так a++; доступ к значению *a;
Тоесть если у меня например указатель a ссылается на 1ый элемента массива и что бы записать туда какое нибудь число мне надо через оператор * Например *a=*b где b указатель на число в другом массиве Цитата(mephisto @ 27.2.2010, 10:42)  Не такой год я править не буду, из него конфетку уже не сделаешь  Держи пример, разбирайся. Код anton@bc /tmp $ cat 1.c #include <stdio.h>
int main() { char A[] = "Hellow world!\0"; int i; for (i = 0; *(A + i) != '\0'; i++) printf ("%c", *(A+i)); printf ("\n"); return 0; } anton@bc /tmp $ gcc -Wall 1.c && ./a.out Hellow world! anton@bc /tmp $
Что это вообще и что в моём предыдущем коде такого прям ужастного? Сообщение отредактировал HELKERN - 27.2.2010, 10:11
|
|
|
|
mephisto |
27.2.2010, 11:28
|

ортодоксальный линуксоид
Группа: VIP
Сообщений: 7 724
Регистрация: 17.11.2007
Из: столицы вашей родины
Пользователь №: 10 849

|
Цитата(HELKERN @ 27.2.2010, 9:05)  Вот это другой разговор) А то mephisto предложил адрес сравнивать с символами \0
mephisto просто забыл звёздочку поставить, я на Си уже месяца два не писал вообще
|
|
|
|
HELKERN |
27.2.2010, 11:35
|

Ближе бандерлоги. Ближе.
Группа: Sibnet-club
Сообщений: 3 460
Регистрация: 22.2.2008
Из: Улан-Удэ
Пользователь №: 21 789
Репутация: 745

|
Цитата(mephisto @ 27.2.2010, 12:28)  mephisto просто забыл звёздочку поставить, я на Си уже месяца два не писал вообще
Окей Я уже додумался сам, не без ваших идей) Кому интересно то вот: » Спойлер (нажмите, чтобы прочесть) « Код #include "stdafx.h" #include <conio.h> #include "string.h"
char A[]="aieoquyAIEOQUY0"; char B[10]; char C[10]; char * a,* b,* c; void main () { printf(" Vvedite stroky ne bolshe 10 simvolov\n"); gets(B); a=A; b=B; c=C; while(*b!=0) { if(*b==*a) { *c=*b; a=A; c++; b++; } else if(*a!='0')a++; else{ b++;a=A;} } puts(C); getch(); }
|
|
|
|
Linky |
27.2.2010, 12:04
|

МЕГА флудер
Группа: Sibnet-club
Сообщений: 3 466
Регистрация: 31.3.2008
Из: Барнаул
Пользователь №: 27 560
Репутация: 243

|
Цитата(HELKERN @ 27.2.2010, 10:35)  Я уже додумался сам, не без ваших идей) Кому интересно то вот:
интересно  Код // излишне это всё :) я бы лучше как у mephisto сделал, но дело не в этом char B[10]; char C[10]; // char * a,* b,* c;
нужно нулями инициализировать то что потом выводишь, ну или перед выводом последний элемент сделать = '\0' если массив на стеке, т.к. не гарантируется что там нулями будут, как у глобальных переменных например Код linky@tfmf:~$ gcc -Wall main2.c && ./a.out main2.c:3: warning: return type of ‘main’ is not ‘int’ /tmp/ccu7ttBU.o: In function `main': main2.c:(.text+0x45): warning: the `gets' function is dangerous and should not be used. Vvedite stroky ne bolshe 10 simvolov asd dsa aa� D
|
|
|
|
HELKERN |
28.2.2010, 20:58
|

Ближе бандерлоги. Ближе.
Группа: Sibnet-club
Сообщений: 3 460
Регистрация: 22.2.2008
Из: Улан-Удэ
Пользователь №: 21 789
Репутация: 745

|
Цитата(Linky @ 27.2.2010, 15:42)  как раз таки у тебя локальные, main обычная ф-я за небольшим исключением, то что она является точкой входа, которую кстати можно сменить, и массивы на стеке разместились, а не в секции данных как у глобальных  char A[15]="aieoquyAIEOQUY"; char B[10]; char C[10]; char *a,*b,*c; Это локальные переменные? 0_о подумай еще раз)
|
|
|
|
|
  |
1 чел. просматривают этот форум (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|