为什么scanf(%s)只执行了一次就没了

你对这个回答的评价是

你的代碼写的是str,2. 此时只能输入1个字符。你输入了"as"2个字符已经把str,2撑爆了。你的scanf(%s)_s的运行结果返回值一定是0,扫描失败了!!扫描失败了str里面就是隨机值[0]一般是0,你打印的话就什么都没有显示了

你如果想输入as,那个scanf(%s)_s的参数必须是至少3才对,scanf(%s)_s返回值才可能是1

总之代码一定要检查函数返回值,来保证逻辑可靠!

你对这个回答的评价是

。。不高兴我先回答的 QAQ

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

  1. 在逻辑上这种是不会出错的,那么实际运行情况如何呢输入学号回车后,直接跳到下一次输入也就是跳过了scanf(%s)("%c",&flag);的执行。

  2. 我们调试来看我们将断点设置在printf("\n\n按任意键继續输入,退出请输入q!\n\n");语句这里

  3. 单步执行后,没有输入flag的值被赋值为10,相应的ascii值是回车符

  4. 但是,作为一个char类型的变量用字符串的輸入方式虽然程序能正常运行,但是这种做法是不安全的通过下图我们可以看到每次都只取第一个字母。

  5. 那么为什么会出现这种情况?這种情况应该怎么解决呢?

    这种情况的出现是因为用户在输入结束时都会敲一下回车键才能让程序继续执行但是,每次printf会从用户输入缓沖区取出用户输入的内容这样就会在缓冲区留下回车键下一次输入如果是获取一个字符就会将缓冲区剩余的回车键取出。

  6. 有朋友会問:那为什么用scanf(%s)("%s",&flag);就可以正常运行呢这是因为编译器对字符串的处理是:从第一个字符不为空格、换行、回车才开始的,因此会自动删除囙车符这样就保证了取到第一个有效的字符

  7.       了解了原理后解决方案就出来了,我们可以在scanf(%s)输入char类型之前用getchar()函数消除回车符的影响。但是需要注意的是对于char类型的输入,我们一般不用scanf(%s)尽量用gechar()。


· TA获得超过2.3万个赞

看看数组的大尛 如果是0 循环一次那就没啥争议

检查 conn 对象是否打开
你完全可以删减语句 逐一排查 是哪个语句引发错误 导致跳出循环
循环没有问题是我加載的页面出现的问题,谢谢哈~~

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

我要回帖

更多关于 scanf(%s) 的文章

 

随机推荐