Zmiana liter z dużych na małe i odwrotnie C.

0

Witam. Jestem początkującym użytkownikiem języka C jak i forum. Potrzebuję pomocy z programem, który ma zmieniać literki z dużych na małe i na odwrót. Doszedłem do stadium, w którym nie potrafię ruszyć dalej. Liczę na jakąś podpowiedź. Z góry dziękuję.

 /* zmiana liter z duzych na male i odwrotnie */

#include <stdio.h>


char line[100];
int getline(void);


	
main(){
	
	puts("Podaj litere");
	getline();
	printf("%s\n", getline());
	
	return 0;
}

int getline(void){
	
	int i, c=0;
	extern char line[];
	
	for(i=0;i < 100 - 1 && (c=getchar()) != EOF && c != '\n';++i){
		line[i]=c;
		if((c>=65) && (c<=90)){
			c+=32;
			line[i]=c;
			++i;
		}
		else if ((c>=97) && (c<=122)){
		c-=32;
		line[i]=c;
		++i;
		}
	
	}
	return 0; 
2

A my liczymy, że powiesz z czym masz problem. Ale mam kilka rad:

  • stosuj kolorowanie kodu (odpowiednie tagi), lepiej się czyta niż takie "coś"
  • używasz jakichś magic-numbers. Teraz to jest jasne co oznacza 97/122 i inne. Ale za miesiąc będziesz mógł mieć problem. Możesz po prostu sprawdzać:
if (c >= 'A' && c <= 'Z')
  • zapoznaj się z tymi funkcjami:
#include <ctype.h>

toupper(c);
tolower(c);
isupper(c);
islower(c);

Są to funkcje znajdujące się w standardzie.

Poza tym nie używaj zmiennych globalnych.

0

Dziękuję za radę. Faktycznie zapomniałem podać powodu całego zamieszania. Chodzi o to że po wprowadzeniu danych z wejścia na wyjściu dostaję NULL.

2
  1. Nie używaj zmiennych globalnych - bokiem to wyjdzie.
  2. Nie obrabiaj hurtem to co można obrobić pojedynczo (znak po znaku zamiast wiersz po wierszu), "hurtowość" - ewentualnie dodasz później.
  3. Nie obawiaj się umieszczenia funkcji przed main() to jedynie upraszcza.
  4. Zapoznaj się z funkcjami z <string.h> - jak wyżej napisał @Mr.YaHooo
    Po uwzględnieniu wszystkiego wyżej wyjdzie ci: http://ideone.com/F17HL6
#include <ctype.h>
#include <stdio.h>

int capSwap(int ch)
  {
   if(isupper(ch)) return tolower(ch);
   if(islower(ch)) return toupper(ch);
   return ch;
  }

int main()
  {
   int ch;
   puts("Podaj tekst (<ctrl-Z> - koniec):");
   while((ch=capSwap(getchar()))!=EOF) putchar(ch);
   return 0;
  }

Aczkolwiek wystarczy takie coś:

#include <ctype.h>
#include <stdio.h>

int main()
  {
   int ch;
   puts("Podaj tekst (<ctrl-Z> - koniec):");
   while((ch=getchar())!=EOF) putchar(isupper(ch)?tolower(ch):toupper(ch));
   return 0;
  }
0

Dziękuje za pomoc. Zaraz biorę się za przyswajanie tych funkcji :)

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