You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用scanf读取括号内的整数?已尝试代码但输出异常

解决scanf读取括号内整数的问题

嘿,我来帮你搞定这个问题!你遇到的输出垃圾值的情况,本质是scanf的格式串和输入缓冲区里的内容不匹配,导致三个变量根本没被正确赋值,所以输出的是未初始化局部变量的随机值。

问题根源

你的输入是12 23 2 (12, 34, 52),当执行完scanf("%d", &s );后,s被赋值为2,但此时输入缓冲区里还剩下 (12, 34, 52)(注意2后面有个空格)。接下来的scanf("(%d, %d, %d)", &x, &y, &a);要求开头必须是(,但缓冲区当前的第一个字符是空格,匹配失败,所以这个scanf调用没有给x、y、a赋值,它们的值就是内存里的随机垃圾数据。

修复方案

只需要在读取括号的scanf格式串开头加一个空格,让它自动跳过任意数量的空白字符(空格、换行、制表符都算):

#include <stdio.h>
int main() {
    int m, n, s, x, y, a;
    scanf("%d %d",&m, &n );
    scanf("%d", &s );
    // 格式串开头加空格,跳过前面的空白
    scanf(" (%d, %d, %d)", &x, &y, &a);
    printf("x is: %d\n y is: %d\n a is: %d\n", x, y, a);
    return 0;
}

额外小技巧

为了避免类似问题,你可以检查scanf的返回值,它会返回成功读取的变量个数。比如如果括号里的三个数没读成功,就提示错误:

if (scanf(" (%d, %d, %d)", &x, &y, &a) != 3) {
    printf("读取括号内的数字失败!\n");
    return 1;
}

这样你就能及时知道输入是否符合预期啦。

内容的提问来源于stack exchange,提问作者Jorge Eduardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:21:03