i starting learn c. trying make code count amount of a's , a's in sentence code gives me random numbers every time executed if same sentence.
#include <stdio.h> #include <string.h> int main() { char words[10000000000]; int i; int acount = 0; int acount = 0; char a[0]="a"; char a[0]="a"; printf("input sentence counted."); scanf("%s",words); printf("%s",words); (i=0;i<=sizeof(words);i++) { if (words[i]==a[0]){ acount++; }else if (words[i]==a[0]){ acount++; } } printf ("\nthe number of a's %i. number of a's %i.",acount,acount); return 0; }
why code outputting random numbers though counts?
because you're counting uninitialized memory, given code posted.
this uninitialized:
char words[10000000000];
(if 10 gb fits....)
this sets memory in words
string that's read, plus terminating '\0'
character:
scanf("%s",words);
assuming works, anyway. don't check return value, maybe didn't work...
now loop do? (ignoring fact int
isn't big enough index 10gb array...)
for (i=0;i<=sizeof(words);i++) { if (words[i]==a[0]){ acount++; }else if (words[i]==a[0]){ acount++; } }
that loop check every char
in array word
, compare either 'a' or 'a'. every last 10 billion or of them, many if not of them containing unknown values.
it check 1 char
past end of word
. that's not good. not check past end of word
:
size_t i; ... (i=0;i<sizeof(words);i++) { if (words[i]==a[0]){ acount++; }else if (words[i]==a[0]){ acount++; } }
note change <
instead of <=
, , use of size_t
i
instead of int
.
even better, don't try counting random data:
size_t i; ... (i = 0; words[i]; i++) { if (words[i] == a[0]) { acount++; } else if (words[i] == a[0]) { acount++; } }
since string ends in '\0'
char
value, loop end when words[i]
has 0 value.
Comments
Post a Comment