输入期间两个整数之间的逗号

che*_*oky -2 c input scanf format-string

如果我执行以下操作会发生什么

scanf("%d,%d", &i, &j);
Run Code Online (Sandbox Code Playgroud)

并提供导致匹配失败的输入?它会存储垃圾j吗?

Sou*_*osh 5

输入必须准确提供的符合格式scanf()要成功.

引用C11,章节§7.21.6.2 fsacnf(),(强调我的)

除了在%说明符的情况下,输入项(或者,在%n指令的情况下,输入字符的计数)被转换为适合于转换说明符的类型.如果输入项不是匹配序列,则指令的执行失败:此条件是匹配失败.除非分配抑制由a所示*,该转换的结果是由下面的一个尚未接收到的转换结果的格式参数的第一个参数放置在指向的对象.如果此对象没有适当的类型,或者无法在对象中表示转换结果,则行为未定义.

和,

当所有指令都已执行,或者指令失败时(如下所述),函数返回.

那么,巩固上述案例,

  • 对于类似的输入100, 200,扫描将成功.双方ij会保持给定的值,100200分别.

  • 对于类似的输入100 - 200,扫描将失败(匹配失败)并且内容j将保持不变,即,j未通过操作分配任何值scanf().

建议:始终检查scanf()函数系列的返回值,以确保函数调用成功.