scanf函数是怎么执行的?scanf函数的执行细节?
scanf是接收用户输入,程序这时候是否就停在这条语句?这个接收的过程是怎么样的?用户每输入一个数,它立即接收还是等待用户按回车键后一次性接收?它怎么识别用户的输入是否是...
scanf是接收用户输入,程序这时候是否就停在这条语句?这个接收的过程是怎么样的?用户每输入一个数,它立即接收还是等待用户按回车键后一次性接收?
它怎么识别用户的输入是否是正确的? 展开
它怎么识别用户的输入是否是正确的? 展开
6个回答
展开全部
这个问题,建议你自己亲历调试一下就知道scanf函数执行的内部过程。
按F10跳转到scanf输入函数断点,进而按F11就如scanf函数。印象中是在一个.c文件里执行的中断处理标准输入输出的过程,你可以按Alt+8看到其反汇编,其实是一些机器指令发送控制让CPU进行执行的,具体汇编语言我是不太懂的。看那个也比较繁琐,目前也不再流行去使用汇编语言,如果你感兴趣的话,可以去了解C语言的编译过程,编译原理,这就相对更深了。
回到这个问题,接收过程讲的差不多了。用户输入一个数,它应该说是被立即送到一个缓冲区去了。而不是立即接收,变量就获得了值。这是C语言scanf函数的功能设定。它需要接收一个标志一个数据输入完成,可以是空格,可以是回车,或者你给定了的格式,用逗号或者其他,那么就取出了一个数据。结束一个数据的输入。总的scanf函数执行过程,是一个系统缓存入栈出栈的过程。
scanf输入是否正确,是按其格式来判断的,百科名片上有些解析,比如
scanf("%d%d",&a,&b);
如果两个数输入的都不是整形,那么就是0
while(scanf("%d",&a)!=EOF)这是一种判断输入是否正确的方式
如上,希望对你有帮助
按F10跳转到scanf输入函数断点,进而按F11就如scanf函数。印象中是在一个.c文件里执行的中断处理标准输入输出的过程,你可以按Alt+8看到其反汇编,其实是一些机器指令发送控制让CPU进行执行的,具体汇编语言我是不太懂的。看那个也比较繁琐,目前也不再流行去使用汇编语言,如果你感兴趣的话,可以去了解C语言的编译过程,编译原理,这就相对更深了。
回到这个问题,接收过程讲的差不多了。用户输入一个数,它应该说是被立即送到一个缓冲区去了。而不是立即接收,变量就获得了值。这是C语言scanf函数的功能设定。它需要接收一个标志一个数据输入完成,可以是空格,可以是回车,或者你给定了的格式,用逗号或者其他,那么就取出了一个数据。结束一个数据的输入。总的scanf函数执行过程,是一个系统缓存入栈出栈的过程。
scanf输入是否正确,是按其格式来判断的,百科名片上有些解析,比如
scanf("%d%d",&a,&b);
如果两个数输入的都不是整形,那么就是0
while(scanf("%d",&a)!=EOF)这是一种判断输入是否正确的方式
如上,希望对你有帮助
展开全部
当程序中出现scanf这条语句的时候,系统会停留在这等待用户输入。怎样接收要看你是怎样的输入格式比如scanf(“%d %d”),输入一个字符按 一次空格,如果中间强制用逗号格开的话,输入的时候就要用逗号了。当输入完成时候,按回车即输入完毕,数据储存在变量里。
如果要判断用户是否输入正确,在scanf语句下面加上判断语句就可以了if else,如果需要用户重新输入的话,就需要一个循环语句while
如果要判断用户是否输入正确,在scanf语句下面加上判断语句就可以了if else,如果需要用户重新输入的话,就需要一个循环语句while
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是关于I/O缓冲区的问题 全缓冲,行缓冲,不缓冲。 scanf属于全缓冲。什么事全缓冲呢?
举个例子用scanf 全缓冲就是scanf等待用户输入数据时 先把用户输入的数据用一个临时buf(字符串数组)保存起来 最后用户输入回车时 再一次性把数据拷贝到指定的地址中。行缓冲用于读写文件时。不缓冲 即写入就显示 相应的实现需在linux下看到!
举个例子用scanf 全缓冲就是scanf等待用户输入数据时 先把用户输入的数据用一个临时buf(字符串数组)保存起来 最后用户输入回车时 再一次性把数据拷贝到指定的地址中。行缓冲用于读写文件时。不缓冲 即写入就显示 相应的实现需在linux下看到!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
加一个头文件#include<string>
然后直接string year;后面的就是string name; string grades;什么的,
然后还是用cin接收就行了啊
接收完了你用一个函数去判断是不是数字或者字母
然后直接string year;后面的就是string name; string grades;什么的,
然后还是用cin接收就行了啊
接收完了你用一个函数去判断是不是数字或者字母
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得应该是先 输入的字符都到缓存里了 先然后再一次性读出
回车结束 应该是规定吧
如果想自定义结束字符 可以用 while(getchar() != ‘ ’)
回车结束 应该是规定吧
如果想自定义结束字符 可以用 while(getchar() != ‘ ’)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询