Antalet ord för mitt C program beräknas inte rätt
Hej!
Jag håller på med en uppgift i C där jag ska skriva ett program som tar emot användar input och sedan skriver ut det tredje ordet om meningen är 3 ord eller längre. Inmatningen ska göras med hjälp av en text sträng men det ska också finnas med en char pekare som pekar på det tredje ordet. Sedan ska char-pekaren då skrivas ut. Om meningen har färre än 3 ord ska programmet skriva ut "The sentence is too short". Programmet ska inte behöva hantera dubbelmellanslag, inledande mellanslag, eller skiljetecken.
Min kod ser ut såhär:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define STRING_SIZE 100
void inputIsThreeWordsOrLonger(char** strp, int* words) {
int i;
for (i = 0; i < strlen(*strp); i++) {
if (isspace(**strp)) {
words+=1;
}
if (*words <= 2) {
(*strp)+=1;
}
}
}
int main()
{
char user_input[STRING_SIZE] = { 0 };
char* strp = user_input;
int word_count = 0;
printf("Enter a sentence: ");
fgets(user_input, STRING_SIZE, stdin);
inputIsThreeWordsOrLonger(&strp, &word_count);
if (word_count > 2){
printf("%s", strp);
}
else {
printf("The sentence is too short");
}
return 0;
}
Jag har tänkt att programmet ska ta emot användar-input med hjälp av fgets() och att jag sedan skickar in adresserna av strp och word_count som argument till funktionen inputIsThreeWordsOrLonger(). Programmet räknar antalet ord genom att kolla om utrymmet programmet befinner sig i är ett mellanrum eller inte. Det vill säga når den den bokstav, ska if-satsen med isspace hoppas över och gå till if-satsen som kollar om antalet ord är mindre eller lika med 2. Är den det, ska word_count först avrefereras sedan inkrementeras och pekaren strp ska flyttas fram ett steg. Det ska pågå tills längden av strp har nåtts. När funktionen är klar, kollas om word_count är större än två, för att då skriva ut strp.
Så ska det fungera i teorin, men just antalet ord räknas inte rätt. Jag har debuggat och sett att mindre än 3 ord fungerar, men mer än 3 ord eller exakt 3 ord tar programmet bort antingen för mycket eller för lite. Mitt problem är alltså i if-satsernas villkor i funktionen.
Vad skulle jag kunna ersätta villkoren i if-satserna istället med? Eller om problemet inte är i if-satserna vad är problemet?
Jag ser en sak: words+=1 ska nog vara *words+=1.
Hejsan!
Som Laguna sade, du inkrementerar pekaren word istället av värdet.
Det här är C++ förresten och inte C.