【问题标题】:scanf prevents program from runningscanf 阻止程序运行
【发布时间】:2017-02-18 14:41:20
【问题描述】:

所以我用coderunner写了这个程序,

#include <stdio.h>

int main()
{
    int num1, num2;

    scanf("%d%d", &num1, &num2);

    if (num1 > num2) 
        printf("The min is:%d\n ", num2);
    else
        printf("The min is:%d\n ", num1);
return 0;   
}

问题是程序无法运行。它一直显示这个,然后在一段时间后停止:

删除 scanf 解决了这个问题,我尝试了使用 scanf 的其他程序,它很好。有什么想法吗?

【问题讨论】:

  • 你有没有试过输入一些内容,看看会发生什么?
  • 程序实际上并没有启动,所以我无法输入任何内容。
  • 在输入 2 个数字后为我工作。喜欢22 23
  • 我建议在scanf 之前添加一个提示,例如puts("Enter two numbers");,这样你就可以得到程序运行的肯定证据,以及你应该做什么。
  • 是的,确实有效 facepalm。谢谢!

标签: c coderunner


【解决方案1】:

您希望scanf() 如何解释例如1231232 作为两个整数?您输入的所有数字都有可能被第一个 %d“吃掉”,然后 scanf() 等待第二个。

您必须在它们之间使用一些分隔符或一些非数字字符:

scanf("%d/%d", &num1, &num2);

这告诉scanf() 期望两个数字之间有一个斜线。当然,您也可以只使用空格(格式字符串中没有任何空格,如 cmets 中所指出的那样)。

此外,您应该在依赖数字之前检查返回值:

if(scanf("%d %d", &num1, &num2) == 2)
{
}

【讨论】:

  • 有没有办法让程序使用两个两位数的整数而无需用户按任何操作? (喜欢空格或回车)
  • @Demha 根据定义,scanf 期望输入以特定方式格式化,这意味着您的用户必须知道您期望的格式。如果要处理任意输入,则必须使用 fgetsstdin 并使用 sscanf 解析输入字符串,检查返回值是否有错误。 scanf 是这两个函数的一种受限组合,单独使用它们可以选择如何处理格式错误的输入。
  • @djrollins 感谢您的解释!
  • "%d%d""%d %d" 都允许并且都不期望两个数字之间有空格。一种或另一种格式没有给 OP 带来任何优势。可以使用任一格式输入+123-456 并扫描2 int
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-05
  • 2010-11-04
  • 1970-01-01
  • 2013-01-18
  • 2021-11-10
  • 1970-01-01
相关资源
最近更新 更多