Несколько наблюдений, здесь
fgets(c ,256, stdin);
fgets()
сохраняет \n
в конце буфера, если прочитано.Со страницы справочника fgets()
Если прочитано newline
, оно сохраняется в буфере .Завершающий нулевой байт ('\0'
) сохраняется после последнего символа в буфере
Сначала удалите завершающий \n
, а затем выполните итерации по нему.Например,
fgets(c, sizeof(c), stdin);
c[strcspn(c, "\n")] = 0; /* remove the trailing \n */
Также использование continue
здесь не требуется, т.е. вы можете выполнить задачу, не используя ее.Например,
int main(void) {
int i= 0;
int k= 0;
char c[256] = ""; /* fill whole array with 0 */
fgets(c, sizeof(c), stdin);
c[strcspn(c, "\n")] = 0; /* remove the trailing \n */
while(c[i] != '\0' ){ /* or just c[i] */
if(c[i] == ' ') {
k++; /* when cond is true, increment cout */
}
i++; /* keep it outside i.e spaces or not spaces
this should increment */
}
printf("spaces [%d] without spaces [%d]\n",k,i-k);
return 0;
}