2 svar
64 visningar
mattegeni2000 är nöjd med hjälpen
mattegeni2000 154
Postad: 30 sep 2022 10:33

fel med loop

Hej,jag har ett problem med mitt program

Det första problemet är om jag matar in meningen som innehåller mer än 3 ord så kommer den skriva ut t.ex. "Hello there how are you" så skriver den ut, tror jag 100st  there how are you. men när jag skriver meningar som innehåller mindre än 3 ord så funkar den som den ska. och skulle ni kolla vad har jag gjort för fel, ska jag lägga någon break?

#include <stdio.h>
#include <string.h>

#define SIZE 100

int main(void) 
{

	char arr[SIZE];
	char* p = NULL;
	

	do {

		int count = 0;
		printf("Enter a sentence:");
		fgets(arr, SIZE, stdin);
		for (int i = 0; i < SIZE; i++) {
			if (arr[i] == ' ') {
				count++;
			}
		}
		if (count < 3) {
			printf("The sentence is to short!\n");
		}
		else {
			count = 1;
			for (int i = 0; i < SIZE; i++) {
				if (arr[i] == ' ') {
					count++;
				}
				if (count == 1) {
					p= &arr[i + 2];
				}
				printf("%s\n", p);
			}

		}
		return 0;
	} while (1);
}
Yngve 37884 – Livehjälpare
Postad: 30 sep 2022 16:42 Redigerad: 30 sep 2022 17:08

Det ör den här delen som inte fungerar så som du vill att den ska. Du loopar SIZE gånger och i varje varv skriver du ut p, oavsett vad count har för värde.

Hur vill du egentligen att programmet ska uppföra sig?

anders_k Online 234
Postad: 1 okt 2022 16:07 Redigerad: 1 okt 2022 16:09

Du deklarerar din array så här

char arr[SIZE];

men notera att den är inte initialiserad, så den kan innehålla allt möjligt skräp, det enda man kan garantera är att efter fgets anropet finns det en sträng däri som avslutas med \0, men resten av arrayen efter strängen är orörd och kan fortfarande innehålla skräp. 

så du behöver kolla mot stränglängden istället för SIZE, använd strlen(arr)

for (int i = 0; i < strlen(arr); ++i)

tänk också på att strängen kan innehålla \n eftersom fgets lägger till det om strängen är kortare än SIZE, så det indikerar att sista ordet har hittats.

Svara Avbryt
Close