2 svar
30 visningar
Hexus733 1
Postad: Igår 22:08

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?

Laguna Online 32639
Postad: Idag 08:17

Jag ser en sak: words+=1 ska nog vara *words+=1.

logicbloke 21
Postad: Idag 09:27

Hejsan!

 

Som Laguna sade, du inkrementerar pekaren word istället av värdet.

Det här är C++ förresten och inte C.

Svara
Close