【发布时间】:2018-11-03 02:48:43
【问题描述】:
所以我有一个简单的代码,它可以扫描单词的每个字母并使用指针写入它的值和地址。
我的问题是 %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)
我的代码完全跳过了空格,就好像它们根本不存在一样。 提前致谢。
【问题讨论】:
-
您显示的输出是实际还是预期输出?请花一些时间阅读有关 how to ask good questions 和 this question checklist 的信息。
-
另外,对于
scanf格式" %c",您认为前导空格有什么作用?请阅读例如thisscanf(and family) reference 了解更多信息。 -
特别是紧跟在标题 "A 指令是以下之一的段落:" in scanf(3) - Linux manual page
-
格式说明符 '%c' 可以获取任何字节值,包括空格。问题的核心是
scanf()的格式字符串是“%c”,并且前导空格导致所有前导“空白”被跳过。 (空白是空格、制表符、换行符等)