学习C语言指针:为何代码要求输入两次而非一次?
问题原因及解决方法
问题出在scanf("%d\n", &number);这一行的格式字符串里——你多写了一个换行符\n。
原因说明:
scanf处理格式字符串时,会自动跳过输入中的空白字符(空格、换行、制表符都算),但如果格式字符串里显式写了\n,它会持续等待,直到遇到非空白字符才会结束输入流程。
当你第一次输入数字并按回车后,输入缓冲区里存着数字和换行符。scanf读完数字后,会继续匹配格式里的\n,它会跳过所有后续的空白(包括你刚才的回车,甚至你再按几次回车),直到你输入一个非空白的内容(比如随便敲个字母或数字),它才会认为匹配完成,这就造成了「需要输入两次」的现象。
修复方法:
把格式字符串里的\n删掉,改成:
scanf("%d", &number);
修改后的完整代码:
#include<stdio.h> void square(int *n); int main(){ int number; printf("Enter number : "); scanf("%d", &number); square(&number); return 0; } void square(int *n){ *n = (*n)*(*n); printf("Square : %d\n", *n); }
另外提一句:你对指针的使用是正确的,square函数通过指针成功修改了原变量的值,这部分无需调整。
内容的提问来源于stack exchange,提问作者koushik
相关产品推荐
相关产品推荐

