【问题标题】:Bug with using whitespace to signal end of string使用空格来表示字符串结束的错误
【发布时间】:2020-02-28 18:53:47
【问题描述】:

我正在开发一个程序,该程序执行以下操作:读取用户的输入,并将字符串拆分为由空格分隔的较小字符串,并将它们打印在单独的行中;例如,如果用户输入 AB CD,那么我应该打印

AB
CD

现在我的方法是一次扫描一个字符。如果该字符不是空格,那么我将它收集到一个字符串中(这可能会发生多次)。如果该字符是空格,则打印出收集的字符串。但是当我输入 echo -n (带输入)时,我收集的最后一个字符串没有打印出来,因为没有空格。有什么办法可以通过很少的调整来解决这个问题,还是我的方法完全错误?谢谢

我的代码如下(我把它缩写了一下,我的原始程序限定了字符,如果不是字符A,函数返回-1)

int main(void)
{
    int t = 1;
    char a;
    char pattern_collected[5001];
    int l = 0;

    while (t == scanf("%c", &a)) {
        if (isspace(a)) {
            for (int i = 0; i <= l; i++) {
                printf("%c", pattern_collected[i])
            }
            l = 0;
            memset(pattern_collected, 0x00, 5001);
        } else {
            pattern_collected[l] = 'A';
            l++;
        }
    }
    return 0;
}

【问题讨论】:

  • 你需要检测行尾,通常一个空白字符。是的,换行符是一个空格。 isspace('\n') 会给你一个“真实”的价值。
  • 你能分享你的代码吗?
  • 我猜你正在使用某种 while 循环。在 while 循环完成后,打印该字符串变量(包含最后一个字符串)。
  • 请发布实际的、可编译的代码,而不是仅仅类似于代码的东西。

标签: c input whitespace


【解决方案1】:

如果您的循环因scanf() 没有剩余内容而中断,您需要检查l。如果不为0,则输入遗漏最后一个空格,然后打印pattern_collected中收集的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2023-03-10
    • 2017-09-22
    • 2020-08-21
    相关资源
    最近更新 更多