[C] Słowa pisane od tyłu z użyciem funkcji strlen() w string.h

0

Dzień dobry,

Mam następujący kod:

#include <stdio.h>
int main()
{
int i;
char ord[100];

puts("Skriv: ");
scanf("%s", &ord);

for(i=100; i>=0; i--)
{
printf("%c", ord[i]);
}
}

chciałbym, aby wpisane zdanie przerabiał i wyświetlał od tyłu. Niestety przy każdym użyciu spacji ciąg znaków od tyłu w odpowiedzi jest przerywany.

Mam również pytanie, czy da się użyć tutaj funkcje strlen() w string.h ???

2

Do scanf podajesz wskaźnik złego typu, ale to bez znaczenia dla tego programu. Twoim problemem jest to, że scanf przestaje wczytywać po napotkaniu białego znaku. Użyj fgets albo formatu, który wczytuje do nowej linii, np. (chyba, pisane z głowy) %[^\n]

0
kq napisał(a):

Do scanf podajesz wskaźnik złego typu, ale to bez znaczenia dla tego programu. Twoim problemem jest to, że scanf przestaje wczytywać po napotkaniu białego znaku. Użyj fgets albo formatu, który wczytuje do nowej linii, np. (chyba, pisane z głowy) %[^\n]

Niestety fgets daje identyczny efekt.

#include <stdio.h>
int main()
{
int i;
char ord[100];

puts("Skriv: ");
fgets("%c", &ord);

for(i=100; i>=0; i--)
{
printf("%c", ord[i]);
}
}
0
int n = strlen(ord);

while (--n >= 0) printf("%c", ord[n]);
1

Chyba czarujesz... Nie daje takiego samego efektu, bo w zasadzie nie powinien się kompilować.

  1. Zobacz jak wywołujesz fgets - to nie jest prawidłowe wywołanie
  2. piszesz o funkcji strlen a jej nie stosujesz
  3. fgets może mieć na końcu znak nowej inii, co należy obsłużyć.
0

Rozwiązałem.

#include <stdio.h>
#include <string.h>
 
int main()
{
  	char Str[100], RevStr[100];
  	int i, j, len;
 
  	printf("\n Please Enter any String :  ");
  	gets(Str);
  	
  	j = 0;
  	len = strlen(Str);
 
  	for (i = len - 1; i >= 0; i--)
  	{
  		RevStr[j++] = Str[i];
  	}
  	RevStr[i] = '\0';
 
  	printf("\n String after Reversing = %s", RevStr);
  	
  	return 0;
}
3

Nie używaj gets. Użyj fgets. Tylko tym razem zamiast na pałę zmieniać nazwę funkcji zechciej zajrzeć np. do dokumentacji.

0
kq napisał(a):

Nie używaj gets. Użyj fgets. Tylko tym razem zamiast na pałę zmieniać nazwę funkcji zechciej zajrzeć np. do dokumentacji.

Dziękuję za podpowiedź. Zastosuję natychmiast.

1 użytkowników online, w tym zalogowanych: 0, gości: 1