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);
}
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?
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.