刚学两天,请问这个代码为啥输入后回车无法运行?

代码

#include <stdio.h>

int main()
{
    int a = 0, b = 0, c = 0;
    scanf_s("%d %d\n", & a, & b);
    c = a * b;
    printf("%d\n", c);


    return 0;
}

代码中scanf_s函数的格式字符串中包含了一个回车符(\n),这会导致scanf_s函数在读取a和b的值后停留在输入缓冲区中,直到读取下一个非空白字符。如果想要让这段代码正常工作,可以将scanf_s函数的格式字符串修改为"%d %d",去掉回车符就可以了!

#include <stdio.h>

int main()
{
    int a = 0, b = 0, c = 0;
    scanf_s("%d %d", &a, &b);
    c = a * b;
    printf("%d\n", c);

    return 0;
}


这样子就应该欧克了!

scanf_s语句格式有问题,
&和变量名之间不能有空格;
scanf_s的格式化字串末尾不要留换行符\n,跟printf相似但是是有差别的,新手容易搞不清楚。
应该是这样
scanf_s("%d%d",&a,&b);

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/746622
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:自动化设备制造企业材料替代管理难?替代料解决方案,轻松应对
  • 除此之外, 这篇博客: 【排序算法】冒泡排序中的 代码实现 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    先构建出待排序序列:

    typedef struct {
    	int key;
    }ElemType;
    
    typedef struct{
    	ElemType *n;
    	int length;
    }SSTable;
    
    SSTable CreateTable(){
    	SSTable st;
    	st.n = (ElemType*) malloc(sizeof(ElemType) * 7);
    	st.length = 6;
    	st.n[1].key = 21;
    	st.n[2].key = 25;
    	st.n[3].key = 49;
    	st.n[4].key = 25;
    	st.n[5].key = 16;
    	st.n[6].key = 8;
    	return st;
    }
    

    冒泡排序算法如下:

    void BubbleSort(SSTable t){
    	int i,j;
    	ElemType temp;
    	//比较length - 1轮
    	for(i = 1;i <= t.length - 1;++i){
    		//每轮比较length - i次
    		for(j = 1;j <= t.length - i;++j){
    			if(t.n[j].key > t.n[j + 1].key){
    				//交换
    				temp = t.n[j];
    				t.n[j] = t.n[j + 1];
    				t.n[j + 1] = temp;
    			}
    		}
    	}
    }
    

    我们还可以在此基础上进行一个效率的优化,比如这样的一个序列:
    在这里插入图片描述
    第一轮排序后的结果为:
    在这里插入图片描述
    第二轮排序后的结果为:
    在这里插入图片描述
    第三轮排序后的结果为:
    在这里插入图片描述
    第四轮排序后的结果为:
    在这里插入图片描述
    第五轮排序后的结果为:
    在这里插入图片描述
    可以看到,该序列经过五轮排序后就有序了,但经过上面的分析,该长度为8的序列需要七轮比较,显然后面的两轮就是在做无用功了,那么该如何避免无用的比较呢?

    为此,我们可以设置一个标志域,用于标注当前一轮的比较是否进行了交换,若在某轮比较中未发生元素之间的交换,则说明序列已经有序,可以结束操作了。

    改进后的算法如下:

    void BubbleSort(SSTable t){
    	int i,j;
    	int flag = 1;	//增设一个标志域,为1表示元素间发生了交换,为0表示未发生交换
    	ElemType temp;
    	//比较length - 1轮
    	for(i = 1;i <= t.length - 1 && flag == 1;++i){
    		flag = 0;	//将flag置为0
    		//每轮比较length - i次
    		for(j = 1;j <= t.length - i;++j){
    			if(t.n[j].key > t.n[j + 1].key){
    				flag = 1;		//元素发生交换,flag置为1
    				//交换
    				temp = t.n[j];
    				t.n[j] = t.n[j + 1];
    				t.n[j + 1] = temp;
    			}
    		}
    	}
    }
    
  • 您还可以看一下 传智老师的多角度带你编写更规范的黑盒测试用例课程中的 等价类设计测试用例的步骤小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^