Функция putchar() в массив
Всем привет)
Учусь по книге Д.Ритчи по языку Си. Попалось такое задание (написал в комментарии кода).
По заданию нужно чтобы введённое слово (с помощью функции getchar()) вывдилось в обратном порядке. Как сделать присваивание входного потока getchar() в массив word[i] без использования функции putchar(slovo)?
Потому что выводит в терминале как введённое слово, так и обратное (фото во вложении)
/*Напишите функцию reverse(s) которая переписывает свой строковой аргумент s в обратном порядке.
Воспользуйтесь ею для написания программы которая бы выполняла такое обращение над
каждой строкой входного потока по очереди*/
#include<stdio.h>
#include<string.h>
#define MAXLINE 50
void reverse (char slovo[])
{
int len = strlen(slovo);
char dr_slovo[len];
for (int i = 0; i < len; ++i)
{
dr_slovo[len-1-i] = slovo[i];
}
printf ("%s\n", dr_slovo);
}
int main()
{
int slovo;
char word[MAXLINE];
int i = 0;
while(slovo = getchar())
{
if (slovo == -1)
break;
else if (slovo == '\n')
{
reverse(word);
i = 0;
}
else
{
word[i] = putchar(slovo);
++i;
}
}
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Вы хотите чего-то такого?
#include<stdio.h>
#include<string.h>
#define MAXLINE 50
void reverse (char slovo[])
{
int len = strlen(slovo);
for(int i = 0, j = len-1; i < j; ++i, --j)
{
char t = slovo[i];
slovo[i] = slovo[j];
slovo[j] = t;
}
}
int main()
{
char word[MAXLINE];
int i = 0, c;
while((c = getchar()) != EOF)
{
if (c == '\n')
{
word[i] = 0;
reverse(word);
puts(word);
i = 0;
}
else
word[i++] = c;
}
}
Хотя лично мне вот этот вариант нравится больше:
#include<stdio.h>
#include<string.h>
#define MAXLINE 50
void reverse (char slovo[])
{
int len = strlen(slovo);
if (slovo[len-1] == '\n') slovo[len---1] = 0;
for(int i = 0, j = len-1; i < j; ++i, --j)
{
char t = slovo[i];
slovo[i] = slovo[j];
slovo[j] = t;
}
}
int main()
{
char word[MAXLINE];
while(fgets(word,MAXLINE,stdin))
{
reverse(word);
puts(word);
}
}
P.S. Кстати, у вас в коде имеется выход за границы массива и прочие неприятности, так что совет AlexGlebe недостаточен...
