【问题标题】:Read characters with scanf("%c, &ch);用 scanf("%c, &ch); 读取字符
【发布时间】:2017-02-17 23:33:42
【问题描述】:

我输入的字符之间必须有空格。例如, + / 8 7 - 9 '\n' (当我按 Enter 时) 然后我把它们写成一个字符数组,里面有这样的东西:+/89-9。

如何跳过这些空格?

我想写点东西,但是没有用:

char *arr = new char[1000];
char ch;
scanf("%c", &ch);
int i = 0;
arr[0] = ch;
cout << arr[0];
while (ch != '\n') 
{
    //scanf("%c", &ch);
    scanf("%*[ ]%c", &ch);
    cout << (arr[i++] = ch);

}

arr[i++] = '\n';

【问题讨论】:

  • 混合 C 和 C++ 是不行的,使用一个或另一个函数。
  • 在循环的第一次迭代中,变量i 仍然为零,直到您执行arr[i++] = ch 之前。这意味着您会覆盖循环之前读取的第一个字符。
  • 我的代码进入了无限循环,我无法纠正它,即使我改变了你所说的。

标签: c++ arrays char scanf


【解决方案1】:

你们很亲密

scanf(" %c", &ch);

来自docs

空白字符:格式中的任何单个空白字符 string 使用所有可用的连续空白字符 输入(好像通过在循环中调用 isspace 来确定)。注意 "\n"" ""\t\t" 或其他空格之间没有区别 在格式字符串中。

如果您想跳过\n 以外的空白字符并继续一一阅读(需要#include &lt;cctype&gt;):

while (ch != '\n') {
    scanf("%c", &ch);
    if(!isspace(ch)) {
        cout << (arr[i++] = ch);
    }
}

【讨论】:

  • 我的代码进入了无限循环,我无法纠正它
  • @fghjkl4083 那是因为scanf(" %c", &amp;ch) 永远不会将'\n' 读入ch,因为你告诉它跳过它。
  • 我该如何改变呢?我不知道。
  • 我不能根据任务改变输入字符串
  • 我做了这样的事情:while (ch != '\n') { scanf("%c", &ch); if (ch == ' ') 继续; cout
猜你喜欢
  • 2013-07-04
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
相关资源
最近更新 更多