【问题标题】:I am having problem using scan function in C我在 C 中使用扫描功能时遇到问题
【发布时间】:2021-05-22 04:39:09
【问题描述】:

这里如果在扫描函数中使用了两个格式说明符,但它只在取三个数字后才继续,尽管只存储了两个数字。我不知道为什么它在等待不必要的第三个数字。

#include <stdio.h>

int main(){

    int a ,b ;
    printf("Enter values of a and b ");
    scanf(" %d %d " , &a ,&b );
    printf("a = %d b = %d" ,a ,b);


    return 0;
}

【问题讨论】:

  • 没有明显的原因你有问题,虽然if (scanf ("%d %d", &amp;a ,&amp;b) != 2) { fputs ("error: invalid integer input.\n", stderr); return 1; } 添加验证并从格式字符串中删除不必要的空间。会更好。
  • 很确定尾随空格的意思是“使用空格直到遇到非空格,然后才返回”
  • 顺便说一句:一般来说,如果您使用getline 后跟sscanf,您会发现事情会容易得多。这样,您就可以更好地控制用户按下回车键时发生的情况。
  • 或者至少 fgets() 带有足够大小的缓冲区(字符数组),然后 sscanf() 使用缓冲区作为第一个参数。 (fgets() 而不是getline() 消除了必须free() 分配的缓冲区)fgets()getline() 的唯一缺点是必须在同一行输入两个 值。使用scanf(),它们可以用任意数量的空行分隔。
  • scanf(" %d %d " , &amp;a ,&amp;b );改成scanf("%d %d", &amp;a ,&amp;b );

标签: c scanf


【解决方案1】:

为什么要等待不必要的第三个数字。

" %d %d " 指示 scanf() 在 2 个 int 之后等待一些非空白,以了解所有尾随空白已被消耗。

" %d %d" 指示 scanf() 在 2 int 之后返回。

第一个空格和第二个空格实际上是多余的,因为%d 读取并忽略了数字前的空格,所以你可以直接写:

    scanf("%d%d", &a, &b);

但您还应该测试 scanf() 返回的 2 表示 2 次成功转换。

这是修改后的版本:

#include <stdio.h>

int main() {
    int a, b;
    printf("Enter values of a and b: ");
    if (scanf("%d%d", &a, &b) == 2) {
        printf("a = %d, b = %d\n", a, b);
    } else {
        printf("invalid input\n");
    }
    return 0;
}

【讨论】:

    【解决方案2】:

    将代码粘贴到此链接https://c.runoob.com/compile/11时没有这个问题

    【讨论】:

    • 即成为stdin输入端。
    猜你喜欢
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 2020-02-28
    • 2017-05-17
    相关资源
    最近更新 更多