• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tablice znaków - c

Cloud VPS
0 głosów
294 wizyt
pytanie zadane 13 lutego 2017 w C i C++ przez Astenna Początkujący (340 p.)

Program spośród wprowadzonych wierszy ma wybierać najdłuższy i wyświetlać go na końcu programu.

Problem leży gdzieś w funkcji getline - wg moich testów zwraca ona niepoprawną liczbę znaków w wierszu. Co jest nie tak?

 

#define MAXLINE 1000
#include <stdio.h>

int getlin(char tab[MAXLINE]);
void copy(char to[MAXLINE], char from[]);

int main()
{
  char napis[MAXLINE];
  char longest[MAXLINE]="a";
  int max=0;
  int len; 
  while(len=getlin(napis)>0)
    {
      if(len>max)
	{
	max=len;
	copy(longest,napis);
	}
      //printf("%d",len);
    }
  printf("%s\n",longest);
}

int getlin(char tab[MAXLINE])
{
  int i,c;
  for(i=0; (c=getchar())!=EOF && c!='\n'; i++)
{    
    tab[i]=c;
    printf("%c",tab++);
}
      return i;
}

void copy(char to[MAXLINE], char from[MAXLINE])
{
  int i;
  for(i=0; from[i]!='\0'; i++)
    {
      to[i]=from[i];
    }
  to[i]='\0';
}

 

1 odpowiedź

0 głosów
odpowiedź 13 lutego 2017 przez Sedi Stary wyjadacz (10,200 p.)
wybrane 13 lutego 2017 przez Astenna
 
Najlepsza
Cześć!

Z tego co widzę, Twoja funkcja getlin zwraca prawidłową ilość znaków. Pamiętaj, że łańcuchy w tablicach numerowane są od 0, stąd w wyrazie "Karol", uzyskasz długość 4, a nie 5.

Tak swoją drogą, to skoro piszesz w języku C, nie prościej byłoby użyć gotowej funkcji strlen(char[]), która zwraca długość łańcucha znaków ?
komentarz 13 lutego 2017 przez Astenna Początkujący (340 p.)
Masz rację co do długości znaków, teraz działa!
Teraz jest inny problem: jeśli wprowadzę np.:
ala
ala ma kota
i zakończę program, to na koniec zwraca mi: ala i dwa niezidentyfikowane znaki.
Nie potrafię doszukać się błędu.

Nie wiedziałam, że jest taka funkcja. Zapamiętam na następny raz, ale przynajmniej poćwiczyłam sobie więcej :)

Dziękuję za pomoc
komentarz 13 lutego 2017 przez Sedi Stary wyjadacz (10,200 p.)
Proszę! Jednocześnie co do spacji, to rzeczywiście, przy wpisywaniu Ala ma kota, program automatycznie traktuje spacje jako separator, coś jak znak końca linii. Myślę, że dosyć szybko wpadniesz na pomysł jak rozwiązać ten problem :) W kwestii niezidentyfikowanych znaków, to możliwe, że odpowiedzialny jest za to: printf("%c",tab++), znajdujący się w linii 31. Spróbuj to usunąć i nie powinno być już tych znaków :)

Pozdrawiam serdecznie
komentarz 13 lutego 2017 przez Astenna Początkujący (340 p.)

Serdecznie dziękuję smiley

komentarz 13 lutego 2017 przez Mariusz M Obywatel (1,670 p.)
Jest na to inny sposób jak użycie pary fgets , fputs

Podobne pytania

0 głosów
0 odpowiedzi 256 wizyt
pytanie zadane 17 grudnia 2017 w C i C++ przez Kamillo112 Nowicjusz (120 p.)
0 głosów
3 odpowiedzi 441 wizyt
pytanie zadane 18 stycznia 2017 w C i C++ przez Akiro Bywalec (2,910 p.)
0 głosów
1 odpowiedź 845 wizyt
pytanie zadane 30 czerwca 2016 w C i C++ przez 1naswiecie Początkujący (410 p.)

93,469 zapytań

142,404 odpowiedzi

322,716 komentarzy

62,852 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...