funkcja strcmp

0

Witam mam napisać program korzystający z tablicy char,który będzie odczytywał w pętli słowo po słowie az do wpisania "gotowe".
Potem program pokaze ilośc wpisanych słów(bez "gotowe")
napisałem coś takiego:

#include <iostream>
#include <string>
#include<conio.h>
#include<cstring>
int main()
{
    using namespace std;
	char word[100];
   // char gotowe =  "gotowe";
	cout<<"Podawaj slowa, (kiedy skonczysz napisz \"gotowe\")\n";
    cin>>word;
	int count=0;
    for(count =0;strcmp(word,"gotowe");++count)
    {
    	cout<<word<<" ";
    	cin>>word;
    
	}	
	cout<<"wpisano "<<count<<" slow"<<endl;
    
    getch();
    return 0;
    
}

1.Nie wiem dlaczego program nie chce się skompilowac, tzn kopiluje sie gdy dodam " ! "przed funkcje strcmp().
2.Wiem ze był takie temat juz na forum : http://4programmers.net/Forum/C_i_C++/224634-pytanie_do_petli_while_tablica_char
,lecz czy da radę to zrobić mniej więcj tak jak wygląda mój kod?
Pozdrawiam

2
#include <cstring>
#include <cstdio>

int main(void) {
	char buffer[256] = {0}; unsigned counter = 0;
	while((scanf("%255s", buffer) && strcmp(buffer, "gotowe")) && ++counter);
	printf("%u\n", counter);
	return 0;
}
2

Przekombinowałeś, synu.

#include <iostream>
#include <cstring>
 
using namespace std ;
 
int main()
{
  char word[100] ;
  int count = 0 ;
 
  while (1)
  {
    cin >> word ;

    if (!strcmp(word, "gotowe")  ) break ;

    count++ ;
  }
 
  cout << count << endl ;
}
0

n0name: Dzięki , tylko widziałem już to zadanie zrobione w takim stylu, lecz czy da się to zrobić bez scanf , procentów itd?:)Tzn żeby wyglądał tak jak mój lub Lorda Darkstorma ?
Jesli się nie da to czy mógłbys mi poowiedziec po co jest ta linijka? char buffer[256] = {0} oraz scanf("%255s", buffer)
Lord Darkstorm: Twój kod sie nie kompiluje,tak jak wiele moich prób z użyciem linijki:while (strcmp(word, "gotowe") )
Próbowałem już na rózne sposoby,ale kompiluje się tylko jesli przed strcmp daje !.

1

Tak, da sie. Wystarczy zamienic scanf na cin i printf na cout.

#include <cstring>
#include <iostream>
#include <iomanip>
 
int main(void) {
    char buffer[256] = {0}; unsigned counter = 0;
    while((std::cin >> std::setw(sizeof(buffer)) >> buffer && strcmp(buffer, "gotowe")) && ++counter);
    std::cout << counter << '\n';
    return 0;
}
2

Może zrobię jeszcze całkiem c++ wersje:

#include <iostream>
#include <string> 
using namespace std ;
 
int main()
  {
   size_t count=0;
   for(string word;(cin>word)&&(word!="gotowe");++count) {}
   cout<<count<<endl;
   return 0;
  }
3

W C++ to sens by mialo uzyc tego C++ :)

#include <iostream>
#include <iterator>
#include <algorithm>
#include <string>
using namespace std;

int main() {
	cout << count_if(istream_iterator<string>(cin),
					 istream_iterator<string>(),
					 [](const string& w) { return w != "gotowe"; });
	return 0;
}
0

ohoho ile postów... niech ja to ogarne :D

1

Po przeróbce oryginalnego programu

...wyszedł mi program prawie identyczny z postu Lorda Darkstorm...

0

Dzięki wszystkich, przetrawię wszystkie sposoby które zostały tutaj pokazane. Pozdrawiam

1

To może takie coś:

#include <cstring>
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
  {
   char buffer[256];
   size_t counter=0;
   while(((cin>>setw(sizeof(buffer))>>buffer)&&(strcmp(buffer,"gotowe")))) ++counter;
   cout<<counter<<endl;
   return 0;
  }

setw nie pozwoli wczytać do buffer więcej niż 256 znaków

EDIT: po zmianach wyszło dokładnie to co u @n0name_l tu: http://4programmers.net/Forum/C_i_C++/233025-funkcja_strcmp?p=1030590#id1030590

0

Orłem to może ja jeszcze nie jestem, lecz ty też nie;) Twój kod nie działa, temat do zamknięcia:)

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