Вывод символов строки в обратном порядке

Рейтинг: -1Ответов: 1Опубликовано: 27.04.2015

Не получается написать программу, которая читает строку входных данных, а затем печатает эту строку в обратном порядке. По условию можно запоминать входные данные в массиве значений типа char ; предполагается , что строка со стоит не более чем из 255 символов. Нужно обязательно воспользоваться функцией scanf() со спецификатором %с , чтобы выполнять посимвольное считывание с устройства ввода. Как?

#include <stdio.h>
#include <locale.h>
#include <string.h>

int main(void)
{
    setlocale(LC_ALL, "rus");
    setlocale(LC_NUMERIC, "C");

    char str[255];
    int i, j;

    printf("Введите строку:\n");
    for (i = 0; i < 255; i++)
       scanf("%c", &str);
    for (j = strlen(str); j >= 0; j--)
        printf("%c", str[j]);

    return 0;
}

Вот так получается:

#include <stdio.h>
#include <locale.h>
#include <string.h>

int main(void)
{
    setlocale(LC_ALL, "rus");
    setlocale(LC_NUMERIC, "C");

    char str[255];
    int i, j;

    printf("Введите строку:\n");
    scanf("%s", str);
    //for (i = 0; i < 255; i++)
       //scanf("%c", &str);
    for (j = strlen(str); j >= 0; j--)
        printf("%c", str[j]);

    return 0;
}

а через спецификатор %с, посимвольно, как по условию задачи - нет..??

Ответы

▲ 2Принят
char str[255];

255 символов в строке и ещё нолик - так что надо 256.

char str[256];
for (i = 0; i < 255; i++)
  scanf("%c", &str);

Взятие адреса массива - это неправильно. Массив - это уже адрес первого символа.

 for (i = 0; i < 255; i++)
    scanf("%c", str);

Условие выхода - это перевод строки, а не достижение 255 символов:

for (i = 0; scanf("%c",str), *str!='\n'; i++);

Дальше, символы надо писать последовательно, а не все в нулевую позицию:

for (i = 0; scanf("%c",str+i), *str[i]!='\n'; i++);

Строка должна заканчиваться нулевым байтом.
После цикла i указывает на перевод строки, а он нам не нужен, заменяем ноликом:

str[i] = 0;
for (j = strlen(str); j >= 0; j--)
  printf("%c", str[j]);

Длина уже есть в i - можно её и использовать.

while(--i != -1)
  printf("%c", str[j]);

или так

for(--i; i--; )
  printf("%c", str[i]);

Для вывода символа лучше воспользоваться putchar'ом, а не printf'ом:

while(--i != -1)
  putchar(str[i]);

А вообще, я бы использовал указатели, а не индексы:

char s[256], p;
for(*(p=s+255)=0; p>s && (scanf("%c",--p), *p!='\n'); );
puts(p);

Кажется, требования задания выполнены?