为什么这个程序运行不出结果,没有报错。

img

img

输入一个10以后,按回车没有反应,系统也没有报错,照着书抄的,书上是把我的x换成num,但我换了num也是这样,哪位能告诉一下我为啥,该怎么改,谢谢 。

scanf_s 里的换行符 '\n' 去掉,
有换行符,输入需要等到其他非空字符才会结束。

scanf_s中的\n删掉!
否则你要连续输入两次回车键才能完成输入

把第54行的换行符去掉试试

ok,谢谢

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7654522
  • 这篇博客也不错, 你可以看下给定一个按照升序排列的整数数组 nums,和一个目标值 x。找出给定目标值在数组中的开始位置和结束位置。
  • 除此之外, 这篇博客: 三种方法:写一个函数,每调用一次函数,就会将num的值增加1,&&可能遇到的问题中的 写一个函数,每调用一次函数,就会将num的值增加1,以及可能遇到的问题 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1.传址

    int AddNumAddress(int *p)
    {
    	return ++(*p);
    }
    int main()
    {
    	int num = 1;
    	int arr1=AddNumAddress(&num);
    	int arr2 = AddNumAddress(&num);	
    	printf("%d  %d\n", arr1, arr2);
    	system("pause");
    	return 0;
    }
    

    2.全局变量

    int num = 1;
    int AddNum()
    {	
    	return ++num;
    }
    int main()
    {
    	int arr1=AddNum();
    	int arr2 = AddNum();
    	printf("%d  %d\n", arr1, arr2);
    	system("pause");
    	return 0;
    }
    

    3.static修饰变量

    int AddNum()
    {
    	static int num = 1;
    	return ++num;
    }
    int main()
    {
    	int arr1=AddNum();
    	int arr2 = AddNum();
    	printf("%d  %d\n", arr1, arr2);
    	system("pause");
    	return 0;
    }
    

    两种错误写法:
      错误写法一:

    int AddNum(int num)
    {
    	return ++num;
    }
    int main()
    {
    	static int num = 1;
    	int arr1=AddNum(num);
    	int arr2 = AddNum(num);
    	printf("%d  %d\n", arr1, arr2);
    	system("pause");
    	return 0;
    }
    

    错误原因:
      函数调用,形参会实例化,形参是实参的一份临时拷贝,函数中的num和主函数中的num此时不是一个变量,所以对函数操作的形参num,每调用一次,主函数的num并不会递增。
    错误写法二:

    int num = 1;
    int AddNum(int num)
    {	
    	return ++num;
    }
    int main()
    {
    	int arr1=AddNum(num);
    	int arr2 = AddNum(num);
    	printf("%d  %d\n", arr1, arr2);
    	system("pause");
    	return 0;
    }
    

    错误原因,
      创建并初始化num为全局变量,在主函数中作为实参传给函数,此时函数调用会发生形参实例化,形参对实参拷贝,此时函数里面的num和全局变量num并没有直接关系,函数中对num++,并不会影响全局num的值,所以导致每调用一次1,num并不会递增。
      以上两个问题是我遇到的问题,不知道大家有和我一样的嘛,写出来供大家参考,欢迎提问。