Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Флейм (http://www.flasher.ru/forum/forumdisplay.php?f=7)
-   -   кто знает С помогите плиз (http://www.flasher.ru/forum/showthread.php?t=51424)

Artem Brigert 14.11.2003 01:09

кто знает С помогите плиз
 
Подскажите плиз как можно поизящнее написать примерно такой код?

Код:

# include <stdio.h>

void stradd(char*,char*);
int main()
{
        int i;
        char text1[100];
        char text2[21];

        printf("Erster Text? ");

        for (i=0; i<100; i++)
        {
                scanf("%c",&text1[i]);
                if((text1[i] !='\n') && (i<100))
                        continue;
                else
                {
                text1[i]='\0';
                break;
                }
        }


printf("Zweiter Text?");

        for (i=0; i<21; i++)
        {
                scanf("%c",&text2[i]);
                if((text2[i] !='\n') && (i<21))
                        continue;
                else
                {
                text2[i]='\0';
                break;
                }
        }

stradd(text1,text2);
printf("Nach der Verkettung: %s\n",text1);

return 0;
}


void stradd(char *z,char *q)
{
        while(*z)
                z++;
        while(*z++ = *q++)
                ;
}


mort 14.11.2003 14:20

Странно выглядят подобные операции с функциями форматированного ввода.
Данный код корректно работать не будет.

mort 14.11.2003 14:29

Хотя, если внимания обращать не будут и задача была поставлена сделать именно _так_, то:


# include <stdio.h>

void strget(char*, int);
void stradd(char*,char*);

int main()
{
char text1[100];
char text2[21];

printf("Erster Text? ");
strget(text1, 100);

printf("Zweiter Text? ");
strget(text2, 21);

stradd(text1,text2);

printf("Result: %s\n",text1);

return 0;
}

void strget(char* targ, int len)
{
while(((len--)!=0) && (scanf("%c",targ)) && (*(targ)!='\n')){ targ++; }
*(targ)='\0';
}

void stradd(char *z,char *q)
{
while(*z) z++;
while(*z++ = *q++)
;
}


...но это бред.

Nox Noctis 14.11.2003 15:01

че-то вы темните, ребята :))

если надо контроллировать ввод побуквенно -
то вместо scanf("%c", &text1[i]);
проще поставить text1[i] = getch(); :)

а если не надо - то почему бы не считать сразу всю строку через gets() ?

зы: похоже на лабораторную работу по информатике для первого курса тех. вуза :)

mort 14.11.2003 15:13

gets, getch можно, но они только под DOS
да и не понятно: может быть задача была поставлена scanf юзать, а может быть алгоритм прикинуть.
х3.


пущай думает... :rolleyes:


p.s.
Лабораторная поди и есть.
Кто бы стал такое ТАК делать? :)

Crazy 14.11.2003 15:16

Re: кто знает С помогите плиз
 
Цитата:

Оригинал написал(а) Artem Melnikov
Подскажите плиз как можно поизящнее написать примерно такой код?
Что должен делать этот код?

Crazy 14.11.2003 15:20

Цитата:

Оригинал написал(а) mort
gets, getch можно, но они только под DOS
Тебя глючит. :)

Код:

man gets
man getch

:)

mort 14.11.2003 15:30

:)
хорошо, перефразирую:

вместо "только под дос"
будет
"только не под windows"


....
хотя gets, по-моему, можно....
ай, да ну ее в болото....

:rolleyes:

Crazy 14.11.2003 16:03

Цитата:

Оригинал написал(а) mort
вместо "только под дос"
будет
"только не под windows"

Тебя глючит все больше. :) Во-первых, gets живет в stdio.h, а соответственно есть практически везде. Что же до getch, то в нативных виндовых системах он обычно живет в conio.h. Пример кода см. на MSDN. :)

mort 14.11.2003 16:17

Да нет, глючит меня все по-прежнему :)
Это была реакция на man.

Таки пришлось в доки лезть...
А чего вы хотели?
Пятница, конец рабочего дня.... :)


Часовой пояс GMT +4, время: 00:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.