user-0 提问: 关于随机产生10道运算的题目，大家帮我看下哪里出错了行吗？

回复:
user: user-1
content: default,,,break

user: user-0
content: 引用 5 楼 qq423399099 的回复:楼上正解，下面来解释下为什么scanf("%d\n\n",&c);这样的是不行的 空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符，空白符可以是space,tab,newline等等，直到第一个非空白符出现为止。（换句话来说就是\n在scanf中不表示等待换行符，而是读取并放弃连续的空白字符,直到下一个非空白符出现为止） 试了下果然可以，谢谢拉

user: user-0
content: 引用 2 楼 adusuccessfully 的回复:看了一会儿，还单步跟调试了下，好像第一次遇到scanf要输入两次，才进入下一句。可能与scanf接收参数有关吧，具体说不清是为啥……  我将scanf换了C++中的cin没有输入两次的问题：  #include<stdio.h> #include<stdlib.h> #include<time.h> #include<iostream> using namespace std; void main() { 	int k,i,a,b,c,sum;//声明变量k,i,a,b,c,sum  	i = 1; 	c = 0; 	sum = 0;  	while(i<=10) 	{ 		srand(time(0)); 		k = rand()%(4-1+1)+1;	//从1到4中取一个随机数k  		a = rand()%(10-1+1)+1;	//从1到10中取一个随机数a  		b = rand()%(10-1+1)+1;	//从1到10中取一个随机数b   		switch (k) 		{ 		case 1: printf("问题%d: %d + %d 等于多少?\n",i,a,b);//随机数a+随机数b的和是多少  			cin>>c;	 //输入答案  			break; 		case 2: printf("问题%d: %d - %d 等于多少?\n",i,a,b);//随机数a+随机数b的差是多少 			cin>>c;//输入答案  			break; 		case 3: printf("问题%d: %d * %d 等于多少?\n",i,a,b);//随机数a+随机数b的积是多少 			cin>>c;//输入答案  			break; 		default:printf("问题%d: %d / %d 等于多少?\n",i,a,b);//随机数a+随机数b的商是多少 			cin>>c;//输入答案  		} 		printf("你的输入的答案为:%d\n",c);//打印每次输入的答案   		if(c == a + b||c == a - b||c == a * b||c == a / b)  		{ 			printf("答对了，你真聪明！\n"); 			sum = sum+10;	 //每答对一题加10分  		} 		else 			printf("答错了，请继续努力\n");  		i++;	 	} 	printf("你的总成绩为%d",sum); //答题总分  }  另 楼主定义的变量，最好都初始化下。 变量初始化，怎讲？ 初始化了怎么产生随机数？

user: user-2
content: 楼上正解，下面来解释下为什么scanf("%d\n\n",&c);这样的是不行的 空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符，空白符可以是space,tab,newline等等，直到第一个非空白符出现为止。（换句话来说就是\n在scanf中不表示等待换行符，而是读取并放弃连续的空白字符,直到下一个非空白符出现为止）

user: user-3
content: 去掉scanf里的所有\n

user: user-4
content: 1 #include<stdio.h>   2 #include<stdlib.h>   3 #include<time.h>   4                 5                 6 int main(void)   7 {               8                 9     int k,i,a,b,c,sum;//声明变量k,i,a,b,c,sum  10     i = 1;     11     sum = 0;   12                13                14     while(i<=10) {  15     |   srand(time(0));  16     |   k = rand()%(4-1+1)+1; //从1到4中取一个随机数k  17     |   a = rand()%(10-1+1)+1; //从1到10中取一个随机数a  18     |   b = rand()%(10-1+1)+1; //从1到10中取一个随机数b  19                20     |   switch (k)  21     |   {      22     |   |   case 1: printf("问题%d: %d + %d 等于多少?\n", i, a, b);//随机数a+随机数b的和是多少  23     |   |   scanf("%d",&c);    //输入答案     24     |   |   break;  25     |   |   case 2: printf("问题%d: %d - %d 等于多少?\n",i,a,b);//随机数a+随机数b的差是多少  26     |   |   scanf("%d",&c);      //输入答案   27     |   |   break;  28     |   |   case 3: printf("问题%d: %d * %d 等于多少?\n",i,a,b);//随机数a+随机数b的积是多少  29     |   |   scanf("%d",&c);      //输入答案   30     |   |   break;  31     |   |   default:printf("问题%d: %d / %d 等于多少?\n",i,a,b);//随机数a+随机数b的商是多少  32     |   |   scanf("%d",&c);        //输入答案  33     |   |   break;                                                                                                                                    34     |   }      35     |   printf("你的输入的答案为:%d\n",c);//打印每次输入的答案  36                37                38                39     |   if(c == a + b||c == a - b||c == a * b||c == a / b)  40     |   {      41     |   |   printf("答对了，你真聪明！\n");   42     |   |   sum = sum+10; //每答对一题加10分  43     |   }       |   else  45     |   |   printf("答错了，请继续努力\n");  46       47     |   i++;  48     }  49              50     printf("你的总成绩为%d",sum); //答题总分  51     return 0;  52 }

user: user-5
content: 看了一会儿，还单步跟调试了下，好像第一次遇到scanf要输入两次，才进入下一句。可能与scanf接收参数有关吧，具体说不清是为啥……  我将scanf换了C++中的cin没有输入两次的问题：  #include<stdio.h> #include<stdlib.h> #include<time.h> #include<iostream> using namespace std; void main() { 	int k,i,a,b,c,sum;//声明变量k,i,a,b,c,sum  	i = 1; 	c = 0; 	sum = 0;  	while(i<=10) 	{ 		srand(time(0)); 		k = rand()%(4-1+1)+1;	//从1到4中取一个随机数k  		a = rand()%(10-1+1)+1;	//从1到10中取一个随机数a  		b = rand()%(10-1+1)+1;	//从1到10中取一个随机数b   		switch (k) 		{ 		case 1: printf("问题%d: %d + %d 等于多少?\n",i,a,b);//随机数a+随机数b的和是多少  			cin>>c;	 //输入答案  			break; 		case 2: printf("问题%d: %d - %d 等于多少?\n",i,a,b);//随机数a+随机数b的差是多少 			cin>>c;//输入答案  			break; 		case 3: printf("问题%d: %d * %d 等于多少?\n",i,a,b);//随机数a+随机数b的积是多少 			cin>>c;//输入答案  			break; 		default:printf("问题%d: %d / %d 等于多少?\n",i,a,b);//随机数a+随机数b的商是多少 			cin>>c;//输入答案  		} 		printf("你的输入的答案为:%d\n",c);//打印每次输入的答案   		if(c == a + b||c == a - b||c == a * b||c == a / b)  		{ 			printf("答对了，你真聪明！\n"); 			sum = sum+10;	 //每答对一题加10分  		} 		else 			printf("答错了，请继续努力\n");  		i++;	 	} 	printf("你的总成绩为%d",sum); //答题总分  }  另 楼主定义的变量，最好都初始化下。   引用 1 楼 hui1989718 的回复:default,,,break  我试过了，不是default,,,break问题

user: user-5
content: 看了一会儿，还单步跟调试了下，好像第一次遇到scanf要输入两次，才进入下一句。可能与scanf接收参数有关吧，具体说不清是为啥……  我将scanf换了C++中的cin没有输入两次的问题：  #include<stdio.h> #include<stdlib.h> #include<time.h> #include<iostream> using namespace std; void main() { 	int k,i,a,b,c,sum;//声明变量k,i,a,b,c,sum  	i = 1; 	c = 0; 	sum = 0;  	while(i<=10) 	{ 		srand(time(0)); 		k = rand()%(4-1+1)+1;	//从1到4中取一个随机数k  		a = rand()%(10-1+1)+1;	//从1到10中取一个随机数a  		b = rand()%(10-1+1)+1;	//从1到10中取一个随机数b   		switch (k) 		{ 		case 1: printf("问题%d: %d + %d 等于多少?\n",i,a,b);//随机数a+随机数b的和是多少  			cin>>c;	 //输入答案  			break; 		case 2: printf("问题%d: %d - %d 等于多少?\n",i,a,b);//随机数a+随机数b的差是多少 			cin>>c;//输入答案  			break; 		case 3: printf("问题%d: %d * %d 等于多少?\n",i,a,b);//随机数a+随机数b的积是多少 			cin>>c;//输入答案  			break; 		default:printf("问题%d: %d / %d 等于多少?\n",i,a,b);//随机数a+随机数b的商是多少 			cin>>c;//输入答案  		} 		printf("你的输入的答案为:%d\n",c);//打印每次输入的答案   		if(c == a + b||c == a - b||c == a * b||c == a / b)  		{ 			printf("答对了，你真聪明！\n"); 			sum = sum+10;	 //每答对一题加10分  		} 		else 			printf("答错了，请继续努力\n");  		i++;	 	} 	printf("你的总成绩为%d",sum); //答题总分  }  另 楼主定义的变量，最好都初始化下。