【问题标题】:How to get scanf to only accept integers?如何让 scanf 只接受整数?
【发布时间】:2020-04-15 17:29:59
【问题描述】:

我是 c 的新手,我想知道这样的事情是否可行,

我正在尝试编写像坐标一样的输入。用户输入一个坐标,如 (3,4),程序会将输入扫描为 3 和 4,它们分别记录在变量 cor1、cor2 中。

我正在尝试这样的输出:

Enter coordinates: (3,4)

3 4                           /*printf("%d %d",cor1,cor2)*/

这可能吗?

谢谢!

【问题讨论】:

  • 看看scanf函数,尤其是%d格式。
  • 如果 scanf 的格式是 int,字符会失败并且 scanf 会返回错误。做一些编码并尝试一下。
  • 如果您希望用户输入他的输入为 (x,y),您可以简单地扫描整行“(3,4)”,然后使用循环和几行代码即可提取两个坐标。希望这对您有所帮助。

标签: c input scanf


【解决方案1】:

scanf 绝对是这里的答案:

int cor1,cor2;
int num_parsed = scanf("(%d,%d)",&cor1,&cor2);
if(num_parsed != 2)
    printf("Failed to parse coords!\n");
else
    printf("%d %d",cor1,cor2);

试一试。

【讨论】:

    【解决方案2】:

    scanf() 函数扫描来自控制台的输入。为了从控制台获取输入,您需要指定要获取的输入类型。对于int 值,我们使用%d 格式说明符来指示我们将输入int 值作为我们的输入。

    现在回答你的问题:你想如何读取用户的输入?用户应该只输入3 4 还是(3,4)?让我们讨论每个场景:

    • 案例一

    这里用户将输入3 4

    int cor1, cor2;
    printf("Enter coordinates: ");
    scanf("%d %d", &cor1, &cor2);
    printf("%d %d", cor1, cor2);
    
    • 案例2

    在这里用户将输入(3,4)。在我输入代码之前,请注意有 3 个冗余的char 值:( , )。我们需要从输入中丢弃这些字符。如您所知,我们使用%c 从控制台输入char 值。为了丢弃那些多余的字符,我们只需使用%*c 格式说明符。

    int cor1, cor2, valueInput;
    printf("Enter coordinates: ");
    
    valueInput=scanf("%*c %d %*c %d %*c", &cor1, &cor2);
    if(valueInput==2){
        printf("%d %d", cor1, cor2);
    }else{
        printf("Failed to parse inputs");
    }
    

    这将允许您输入(3,4) 并输出3 4。为了添加额外的检查,我们还检查了scanf()return 值。如果您不熟悉 return 值,请查看:Herescanf() 函数返回成功输入的数量。作为额外检查,我们还检查了scanf()return 值。在第一种情况下,我跳过了检查,以免您感到困惑。欲了解更多信息,请查看:
    格式说明符: w3schools
    格式化 I/O:overiq

    【讨论】:

      【解决方案3】:

      当然,这是可能的。

      使用与调用 printf() 相同的格式说明符来处理 scanf() 并将 ,(逗号)放在两个格式说明符之间:

      printf("Enter coordinates: ");
      
      scanf("%d,%d", &cor1, &cor2);
      

      请注意,您需要在对象之前通过& 与号运算符来存储十进制值以收集相应对象的地址,这与printf() 调用不同,scanf() 需要。

      如果扫描时出错,还要检查scanf()的返回值:

      if(scanf("%d,%d", &cor1, &cor2) != 2)
      {
           print("Error at scanning!");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-24
        • 2012-12-28
        • 2015-12-30
        • 1970-01-01
        • 2011-08-24
        相关资源
        最近更新 更多