所以我有一个简单的代码,可以扫描单词的每个字母,并使用指针写出它的值和地址。
我的问题是%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)
我的代码只是完全跳过空格,好像根本没有空格一样。 预先感谢。
答案 0 :(得分:0)
编码错误
"%c"
和scanf_s()
需要两个参数rsize_t
和char*
。
这也意味着在启用所有警告的情况下可能无法完成编译。
节省时间,启用所有警告。
scanf_s
函数等效于fscanf_s
,参数为stdin
插入scanf_s
的参数之前。 C11dr§K.3.5.3.44
fscanf_s
函数等效于fscanf
,除了c
,s
和[
转换说明符适用于一对参数之外... §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;
...