scanf格式字符串中的非空白字符
我有一个关于scanf函数在遇到格式字符串中的非空白字符时所采取的过程的问题。根据我正在读的书: 当scanf格式字符串中的非空白字符,c,scanf,C,Scanf,我有一个关于scanf函数在遇到格式字符串中的非空白字符时所采取的过程的问题。根据我正在读的书: 当scanf函数遇到格式字符串中的非空白字符时,scanf将其与下一个输入字符进行比较。如果两个字符匹配,scanf将丢弃输入字符并继续处理格式字符串。如果字符不匹配,scanf将有问题的字符放回输入,然后在不进一步处理格式字符串或读取输入字符的情况下中止 我有点困惑。它表示scanf将其与下一个输入字符进行比较,如果两个字符匹配,scanf将丢弃该输入字符。为什么我们说它与“下一个”输入字符相比较
scanf
函数遇到格式字符串中的非空白字符时,scanf
将其与下一个输入字符进行比较。如果两个字符匹配,scanf
将丢弃输入字符并继续处理格式字符串。如果字符不匹配,scanf
将有问题的字符放回输入,然后在不进一步处理格式字符串或读取输入字符的情况下中止
我有点困惑。它表示scanf
将其与下一个输入字符进行比较,如果两个字符匹配,scanf
将丢弃该输入字符。为什么我们说它与“下一个”输入字符相比较
这是否意味着如果我们有一个格式字符串
scanf(“%d/%d”、&x和&y)
和输入2/4
,scanf
与四个进行比较,因为它是//code>中的下一个输入字符。描述scanf
的另一种方式是,对于非空白字符,它跟随输入,并显示格式字符串中的内容。然而,如果它找到了另一个读卡器,它将“未读”该字符,然后完全停止扫描
例如,让我们看看:
intx,y;
int scanned=scanf(“%dabc%d”、&x和&y);
如果我们给它输入10abc20
,则它按以下顺序运行:
- 它到达
%d
,读取10
,并将其存储在x
中
- 它一个接一个地读取
abc
,并跟随格式字符串中给定的abc
- 它到达
%d
,读取20
,并将其存储在y
中
- 它到达格式字符串的末尾,返回扫描两个值的值
2
- 离开代码后,将使用输入中的所有字符
改为使用相同的程序10abz20
:
- 它到达
%d
,读取10
,并将其存储在x
中
- 它正确地读取
ab
,但当它到达z
时,会取消读取该字符,并提前返回值1
,因为它只扫描第一个数字
- 离开代码,
z20
未读,以后可能会在程序中读取
因此,在您的示例中,scanf(“%d/%d”,&x,&y)
,输入的10/20
将完全扫描,但10d20
只将10
扫描到x中,而将d20
保留为未读。另一方面,10/20
和10/20
完全扫描,但10/20
不扫描。不,%d
读取2
,下一个输入字符是//code>,并与格式字符串中的//code>进行比较。然后%d
读取4
。