【问题标题】:spacing in %d for inputs for scanf [closed]scanf 输入的 %d 间距 [关闭]
【发布时间】:2019-07-31 09:35:34
【问题描述】:

1。如果我输入1234 5.7 elephant 将给出结果输出 12 34 eleph 我知道 * 表示它忽略输入字段,%2d 最多考虑 2 个字符。但是为什么 34 应用于第二个转换字符 %d 它属于第一个 %d 呢?
2.我可以在scanf中包含空格、制表符、换行符吗?发生什么了? scanf("% d % d%s",var1, var2, var3);//这样好吗?

/* input: 1234  5.7  elephant */
/* output: 12  34  eleph */
#include <stdio.h>

int main() {
    int x, y;
    char text[20];

    scanf("%2d %d %*f %5s", &x, &y, text);
    /* input: 1234  5.7  elephant */
    printf("%d  %d  %s", x, y, text);
    /* output: 12  34  eleph */

    return 0;
} 

预期结果:12 头大象

【问题讨论】:

  • @user3121023 对scanf无效。它对 printf 有效。
  • @KamilCuk 是的,'*' 是一个赋值抑制字符。我没看到。:)
  • 34 输入不属于第一个输入,因为它在两个字符处停止。这就是限制%2d 的重点——因此第三和第四个字符不属于它。没有输入被忘记:如果它在输入缓冲区中,它会一直保留在那里直到被读取。
  • vijay_ky 提示:将文本作为文本发布,而不是作为图片发布。文字作为图片吸引了反对票。
  • @chux 是 %2d 最多 2 个字符,感谢您提供有关不要将文本作为图像发布的信息

标签: c printf scanf


【解决方案1】:

scanf 输入的间距为 %d

scanf() 格式中," " 永远不会失败。它扫描可选空白。

为什么将 34 应用于第二个转换字符?

"%2d" 消耗输入的12。格式中的 2 将输入限制为 2 个字符:12@Weather Vane
" " 扫描空格并在输入中看不到任何空格。扫描继续。 "%d" 扫描到 34

我可以在 scanf 中包含空格、制表符、换行符吗?会发生什么?

是的。扫描格式中的空白匹配 0 个或多个输入空白。1

scanf("% d % d%s",var1, var2, var3);这样好吗?

没有。 "% d" 不是有效的 scanf() 转换说明符。

预期结果:12 头大象

这很奇怪。 printf("%d %d %s", x, y, text); 将为y 打印something。对于 int,这不是 nothing 值。


提示:好的代码会检查来自scanf() 的返回值。

if (scanf("%2d %d %*f %5s", &x, &y, text) == 3) {
  printf("%d  %d  %s", x, y, text);
} else {
  puts("Bad input");
} 

更好的代码不使用scanf(),而是使用fgets()。处理错误输入要容易得多。


1"%[]" 说明符中的空格处理方式不同。它需要完全匹配。

【讨论】:

  • 值得注意的是,"%d %d""%d%d"scanf 格式说明符)的行为完全相同。
  • @pmg 是的。令我惊讶的是,即使转换失败,"%d" 也会消耗前导空格。
【解决方案2】:

当你输入时,%2d 会得到2 lengths decimal

如果你试试这个...

int x,y;
/* type  : 1234 */
scanf("%2d %d", &x &y);
/* var x : 12   */
printf("%d %d", x,y);
/* input : 12 34  */

还是这个?

int x,y;
/* type  : 1 234 */
scanf("%2d %d", &x &y);
/* var x : 1   */
printf("%d %d", x,y);
/* input : 1 234   */

如果你的长度有限 它将记录为下一个转换字符

这取决于你的空间!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多