如何使用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
相关产品推荐
相关产品推荐

