【问题标题】:How to get C to ignore spaces?如何让 C 忽略空格?
【发布时间】:2021-12-31 11:38:06
【问题描述】:

我正在开发一个程序,它接收一个 32 位数字并将其输入到一个数组中,然后将其转换为一个 int 数组。但是,这个 32 位数字在某些区域之间包含空格,例如,数字:11000010111110100000000000000000 可以输入为 1 10000101 11110100000000000000000。
当使用后者时,程序将无法运行。有没有办法让 C 忽略空格?
这是我的代码:

int arr[32];
char number[33] = {};
printf("Enter \n");
scanf("%32s", number); // This will scan max 32 characters
for (int i = 0; i < 32; i++)
{
    {
    arr[i] = number[i] - '0';
    }

}

【问题讨论】:

  • 不要指望scanf 是一个好的解决方案。这是一个用途有限的功能。使用fgets 读取一行并解析它。
  • 我不知道操纵 scanf 来做到这一点,但我会采取的方法是扩展数组,阅读整行,自己删除空格,然后使用类似 strtoll .
  • 或逐个字符地读取输入的字符并决定是否要使用每个字符。类似char c; while(scanf("%c", &amp;c) == 1) if (isdigit(c)) { /* do something */}
  • 顺便说一句,我怀疑scanf("%34s", number); // This will scan max 32 characters中的评论。
  • 您希望通过 scanf-magic 实现这一点还是愿意更改您的其余代码?

标签: c scanf c-strings fgets


【解决方案1】:

对于初学者来说,这个 scanf 调用可以调用未定义的行为

scanf("%34s", number);

因为数组编号只有 33 个元素。

char number[33] = {};

此外,根据 C 标准,上述声明不是正确的声明。你需要写

字符数[33] = { 0 };

如果字符串包含嵌入的空格或其长度小于 32,则此 for 循环也可能无效。

for (int i = 0; i < 32; i++)
{
    {
    arr[i] = number[i] - '0';
    }

}

至于你的问题,有两种方法。

随便写

scanf( "%32[^\n]", number );

或者使用fgets的功能点赞

fgets( number, sizeof( number ), stdin );

在最后一种情况下,函数可以将换行符'\n' 附加到输入的字符串中。要删除它,您可以编写

number[ strcspn( number, "\n" ) ] = '\0';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2016-07-09
    • 2015-03-31
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    相关资源
    最近更新 更多