Сканирование пространства как символ - PullRequest
0 голосов
/ 03 ноября 2018

Итак, у меня есть простой код, который сканирует каждую букву слова и записывает его значение и адрес с помощью указателя.

Моя проблема в том, что% c не сканирует пробелы, и я хотел бы, чтобы они. Как мне это сделать?

#include <stdio.h>

int main()
{
    char c1, c2, *p_c;
    while (scanf_s(" %c", &c1) == 1)
    {
        if (c1 == '*')
            break;
        p_c = &c1;
        c2 = *p_c;
        printf("c1: %c (%p) c2: %c (%p) c_p: %c (%p)\n", c1, &c1, c2, &c2, *p_c, p_c);
    }

    return 0;
}

Например

Введите:

is this C?*

Ожидаемый результат:

c1: i (00D3F7CF) c2: i (00D3F7C3) c_p: i (00D3F7CF)
c1: s (00D3F7CF) c2: s (00D3F7C3) c_p: s (00D3F7CF) 
c1:   (00D3F7CF) c2:   (00D3F7C3) c_p:   (00D3F7CF)
c1: t (00D3F7CF) c2: t (00D3F7C3) c_p: t (00D3F7CF)
c1: h (00D3F7CF) c2: h (00D3F7C3) c_p: h (00D3F7CF)
c1: i (00D3F7CF) c2: i (00D3F7C3) c_p: i (00D3F7CF)
c1: s (00D3F7CF) c2: s (00D3F7C3) c_p: s (00D3F7CF)
c1:   (00D3F7CF) c2:   (00D3F7C3) c_p:   (00D3F7CF)
c1: C (00D3F7CF) c2: C (00D3F7C3) c_p: C (00D3F7CF)
c1: ? (00D3F7CF) c2: ? (00D3F7C3) c_p: ? (00D3F7CF)

Мой код просто полностью пропускает пробелы, как будто их вообще не было. Заранее спасибо.

1 Ответ

0 голосов
/ 03 ноября 2018

Ошибка кодирования

"%c" с scanf_s() требует 2 аргумента, rsize_t и char*.
Это также подразумевает, что компиляция может выполняться не со всеми включенными предупреждениями.
Экономьте время, включите все предупреждения.

Функция scanf_s эквивалентна fscanf_s с аргументом stdin вставил перед аргументами scanf_s. C11dr §K.3.5.3.4 4

Функция fscanf_s эквивалентна fscanf, за исключением того, что спецификаторы преобразования c, s и [ применяются к паре аргументов ... §K.3.5.3.2 4

// scanf_s(" %c", &c1)
scanf_s(" %c", &c1, sizeof c1)

Моя проблема в том, что% c не сканирует пробелы, и я хотел бы, чтобы они. Как мне это сделать?

" " потребляет пробелы

до не потреблять пробелы, такие как ' ', пропустить ведущий " "

// scanf_s(" %c", &c1, sizeof c1)
scanf_s("%c", &c1, sizeof c1)

Или упростить с scanf()

scanf("%c", &c1)

Или еще больше упростить с getchar()

char c1;
int ich;
while ((ich = getchar()) != EOF) {
  c1 = (char) ich;
  ...
...