Odwracanie wyrazu w C

0

Witajcie,co z moim kodem jest nie tak? Nie wyświetla się nic ;x przeanalizowałem go kilka razy i wydaje mi się,że logika jest chyba dobra?

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

int main(void)
{
char word[20];
int length,ip,ik;

printf("Give a word:  ");
scanf("%s",&word);

length=strlen(word);

for(ip=0,ik=length;ip<=length;ip++,ik--)

	word[ip]=word[ik];
	
	
printf("\n\nFrom the back it is %s\n\n",word);

		

system("Pause");
return 0;

}

1

Logika ma dwa błędy.
Dla napisu "BUBEL" robisz następujące kroki:
B='\0'; -> "\0UBEL"
U=L; -> "\0LBEL"
B=E; -> "\0LEEL"
E=E; -> "\0LEEL"
L=L; -> "\0LEEL"
'\0='\0; -> "\0LEEL"
Napis teraz zaczyna się od kodu końca więc nic się nie wyświetla.

0

Ok,faktycznie zapomniałem o znaku zakończenia. W każdym razie poprawiłem kod i teraz pojawił się kolejny problem-program raz odwraca wszystko ładnie,a drugi dodaje sobie jakieś dodatkowe znaki na koniec.Co tym razem?
Kod:

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

int main(void)
{
char word[100];
int length,ip,ik;

printf("Give a word:  ");
scanf("%s",&word);

length=strlen(word)-1;
char word_new[length];

for(ip=0,ik=length;ip<=length;ip++,ik--)
		word_new[ip]=word[ik];
		
	
printf("\n\nFrom the back it is %s\n\n",word_new+1);

		

system("Pause");
return 0;

}

0
char word_new[length];
...
word_new[length] = word[0];

word_new nie posiada elementu o indeksie length

printf("\n\nFrom the back it is %s\n\n",word_new+1);

wypisz normalnie word_new, bez +1, tamten komentarz dotyczył czegoś innego

0

A więc zrobilem kolejne zmiany i dalej nic...Dodałem komentarze do kodu czego oczekuję,może gdzieś coś źle rozumiem?
Program do na wpisane "abcd" zwraca "dcba+jakieś dwa znaczki".

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

int main(void)
{
char word[100];
int length,ip,ik;

printf("Give a word:  ");
scanf("%s",&word);			//abcd\0

length=strlen(word)-1;		//length=4-1=3
char word_new[length+1];	//word_new[4]

for(ip=0,ik=length;ip<=length;ip++,ik--)
		word_new[ip]=word[ik];  //	word_new[0]=word[3];
								//	word_new[1]=word[2];
								//	word_new[2]=word[1];
								//	word_new[3]=word[0];
		
	
printf("\n\nFrom the back it is %s\n\n",word_new);	// From the back it is dcba

		

system("Pause");
return 0;

}

0

Bo nie masz '\0', na końcu napisu, więc funkcja wypisująca wypisuje kolejne znaki (również te poza tablicą) aż spotka 0. I zanim dodasz ten znak na końcu pamiętaj, żeby zwiększyć rozmiar tablicy, czyli

char word_new[length+2];
0

Próbowałem już tak,ale nic nie dawało. To na pewno nie jest to.

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

int main(void)
{
char word[100];
int length,ip,ik;

printf("Give a word:  ");
scanf("%s",&word);			

length=strlen(word)-1;		
char word_new[length+2];	

for(ip=0,ik=length;ip<=length;ip++,ik--)
		word_new[ip]=word[ik];
		word_new[ip+1]="\0";
		
		
	
printf("\n\nFrom the back it is %s\n\n",word_new);

		

system("Pause");
return 0;

}

0

To \0 oczywiście w '\0' a nie w "\0",źle tu wkleiłem.

0

Dobra,mam rozwiązanie!

Dzięki chłopaki za pomoc ! :)

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

int main(void)
{
char word[100];
int length,ip,ik;

printf("Give a word:  ");
scanf("%s",&word);			

length=strlen(word)-1;		
char word_new[length+2];	

for(ip=0,ik=length;ip<=length;ip++,ik--)
		word_new[ip]=word[ik];
		word_new[length+1]='\0';
		
		
	
printf("\n\nFrom the back it is %s\n\n",word_new);

		

system("Pause");
return 0;

}

0

Tu: scanf("%s",&word); mażesz po pamięci, więc jeżeli działa to jakiś cud.

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

int main(void)
  {
   char word[100],tmp;
   int p,k;
   
   printf("Give a line: ");
   scanf("%[^\n]99s%*c",word);
   for(p=0,k=strlen(word);p<--k;++p)
     {
      tmp=word[p];
      word[p]=word[k];
      word[k]=tmp;
     }
   printf("From the back it is: \"%s\"\n",word);
   // getchar(); // Jeżeli tego potrzebujesz to zmień IDE na jakieś z tego tysiąclecia 
   return 0;
  }

http://ideone.com/FiUqMi

0

No z tego co testowałem to za każdym razem działało dobrze :)
Twojego przykładu niestety nie rozumiem-dopiero zaczynam i pewnie dopiero przyjdzie mi się nauczyć co tak naprawdę zrobiłeś z tym scanf(). Nie mniej jednak dzięki wielkie za zainteresowanie,jutro przeanalizuję sobie Twój przykład dokładniej.

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