扫描空间为char

问题描述 投票:1回答:1

所以我有一个简单的代码扫描一个单词的每个字母,并使用指针写入它的值和地址。

我的问题是%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)

我的代码只是完全跳过空格,就像它们根本不存在一样。提前致谢。

c char scanf
1个回答
0
投票

编码错误

"%c"scanf_s()需要2个参数,rsize_tchar*。 这也意味着在启用所有警告的情况下可能无法进行编译。 节省时间,启用所有警告。

scanf_s函数相当于fscanf_s,其中stdin参数插入到scanf_s的参数之前。 C11dr§K.3.5.3.44

fscanf_s函数等效于fscanf,除了cs[转换说明符适用于一对参数...§K.3.5.3.24

// 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;
  ...
© www.soinside.com 2019 - 2024. All rights reserved.