首页 > 解决方案 > 如何让 scanf 只接受整数?

问题描述

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

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

我正在尝试这样的输出:

Enter coordinates: (3,4)

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

这可能吗?

谢谢!

标签: cinputscanf

解决方案


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

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

  • 情况1

在这里用户将输入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。为了添加额外的检查,我们还检查 的returnscanf()。如果您不熟悉某个return值,请查看:Here。该scanf()函数返回成功输入的数量。作为额外检查,我们还检查 的returnscanf()。在第一种情况下,我跳过了检查,以免您感到困惑。有关更多信息,请查看:
格式说明符:w3schools
格式化 I/O:overiq


推荐阅读