You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

学习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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 07:36:19