C语言*n= 100; printf("%d\n", score); 输入英文字母会出现无限的

第一个题目:
#include <stdio.h>
void change2(int n[])
{
*n= 100;
}
int main()
{
int time[5]={78,5,3};
change2(time);
printf("%d\n",time[0]);
return 0;
}
请问“void change2(int n[]){ *n= 100; }”这一部分是什么意思?为什么会替换掉 time[0]的元素?

第二个题目
#include <stdio.h>
int main()
{
int a = 20;
int score = a + 100;
printf("%d\n", score);
{
int score = 50;
{
score =10;
printf("%d\n", score);
}
a = 10;
}
{
score = a +250;
int score = 30;
printf("%d\n", score);
}
printf("%d\n", score);
return0;
}
输出结果是:(注意:有个%d后面是没有的\n的)
120
10
30
260
//为什么最后一个输出地是260呢?不是应该是最外括号的 score=120吗?

第三个问题是:
//请输入一个97~122之间的数字并打印 ASCAII值相应地英文字母!
#include <stdio.h>
char upper(char c)
{
return c;
}
int main(){
while (1) {
int n=0;
printf("请输入一个97~122之间的数字!\n");
scanf("%d",&n);
if (n>=65&&n<=122) {
char cc=upper(n);
printf("%c\n",cc);
}else{printf("请输入一个97~122之间的数字!\n");}
}
return 0;
}
为什么我在键盘上输入除了数字之外的符号,输入英文字母会出现无限的“请输入一个97~122之间的数字!”?好像是进入一个死循环。代码应该怎么编写才能解决这个问题?
第一个问题:*n指向的是数组的第一个元素吗?
第二个问题:score = a +250;后面又有一个 int score = 30;,那这样score不会被重新赋值为30吗?
第三个问题:while 死循环是故意的,不是这个问题。问题是只要输入英文字母系统就会报错,输入数字就正常运行

第1个回答  推荐于2016-06-15

前面那哥们说的是对的。

    *n确实是指向传入数组的第一个元素,数组名n单独时代表的是数组的首地址。

    不会,因为新定义的score是第二个尖括号内的,也就是这一块的局部变量,与最外层的score无关。

    输入错误是肯定的,我也试了,这里是以%d格式读取的,输入字符会出错误。

追问

3. 请问怎么解决输入字符会出错误的局面,这个错误是由于 while 循环引起的吗?

追答

死循环错误与while循环有关,为何会这样我也不清楚,根本原因还是在于以%d格式读入字符。你想读入字母做什么,不是只实现输入数字转变为字母吗,你还想实现输入字母又输出字母吗,那读取方式可能就不能简单地%d了,%c或者%s读入,然后再写个函数来判断吧

本回答被提问者和网友采纳
第2个回答  2015-08-31
第一题:数组的首地址就是第一个元素的地址,所以修改首地址指向的值就是修改第一个元素的值;
第二题:score = a +250;这个执行的时候修改的主函数的score值,因为其他的score已经不在生存周期内了。

第三题:while (1) 这本就是个死循环,解决问题可以在if中加入break追问

第一个问题:*n指向的是数组的第一个元素吗?
第二个问题:score = a +250;后面又有一个 int score = 30;,那这样score不会被重新赋值为30吗?
第三个问题:while 死循环是故意的,不是这个问题。问题是只要输入英文字母系统就会报错,输入数字就正常运行

相似回答