Сколько символов в данном массиве, но пробелы - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь выяснить, сколько символов в данном массиве, кроме пробелов, но он не работает, k должен считать пробелы и вычитать их из i [символов + пробелов], но это не так.

int i= 0;
int n= 0;
int k= 0;
char c[256] = {};
fgets(c ,256, stdin);

while(c[i] != '\0' ){
     if(c[i] == ' '){
             i++;
             k++;
             continue;}
i++;}


printf("%d",i-k);

1 Ответ

0 голосов
/ 30 декабря 2018

Несколько наблюдений, здесь

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;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...