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

Tablice znaków - c

Object Storage Arubacloud
0 głosów
179 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,640 p.)
Jest na to inny sposób jak użycie pary fgets , fputs

Podobne pytania

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

92,551 zapytań

141,397 odpowiedzi

319,528 komentarzy

61,936 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...