| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1008 人关注过本帖
标题:C语言一个程序有不解之处,求解
只看楼主 加入收藏
csy294745333
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2012-3-27
结帖率:9.09%
收藏
已结贴  问题点数:5 回复次数:14 
C语言一个程序有不解之处,求解
#include<stdio.h>
#include<string.h>
int main()
{
 void change(char n[]);
 char n[10];           //0-48
 printf("请输入一个四位数:\n");
 gets(n);
 change(n);
 return 0;
}
void change(char n[])
{
 int i;
 for(i=strlen(n);i>0;i--)
 {
  n[2*i]=n[i];
  n[2*i-1]=' ';
 }
 printf("转换后输出:\n%s\n",n);
}

这个程序我想了好多遍,字符数组的n[0]应该是一个空格啊,为什么输出时第一个直接是字符?
搜索更多相关主题的帖子: return change include void 
2012-09-12 14:14
csy294745333
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2012-3-27
收藏
得分:0 
以下是引用csy294745333在2012-9-12 14:14:14的发言:

#include
#include
int main()
{
 void change(char n[]);
 char n[10];           //0-48
 printf("请输入一个四位数:\n");
 gets(n);
 change(n);
 return 0;
}
void change(char n[])
{
 int i;
 for(i=strlen(n);i>0;i--)
 {
  n[2*i]=n;
  n[2*i-1]=' ';
 }
 printf("转换后输出:\n%s\n",n);
}

这个程序我想了好多遍,字符数组的n[0]应该是一个空格啊,为什么输出时第一个直接是字符?
题目是输入四位数,然后每位中间空一个空格输出
2012-09-12 14:15
ldzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:64
专家分:339
注 册:2012-7-30
收藏
得分:2 
for(i=strlen(n);i>0;i--)
{
  n[2*i]=n[i];
  n[2*i-1]=' ';
}
n[2*i-1]=' ',楼主认为i的值为多少结束循环呢?
2012-09-12 16:14
Andony
Rank: 2
等 级:论坛游民
帖 子:38
专家分:60
注 册:2012-9-12
收藏
得分:2 
回复 楼主 csy294745333
change()函数里面的for循环是有问题的,数组元素从 n[0] ... n[strlen(n) - 1]。

重复的事情用心做,你就是赢家
2012-09-12 18:06
csy294745333
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2012-3-27
收藏
得分:0 
回复 3楼 ldzy
我认为gets(n);运行以后,n[0],n[1],n[2],n[3]会分别被赋予4个数字,

但是运行for(i=strlen(n);i>0;i--)

{
n[2*i]=n[i];
n[2*i-1]=' ';
}
以后,先把n[4]的值赋给n[8],n[7]赋值为空格字符,n[3]的值赋给n[6],n[5]赋值为空格字符,n[2]的值赋给n[4],n[3]赋值为空格字符,n[1]的值赋给n[2],n[1]赋值为空格字符,但是这与之前n字符数组存入数据的位置是不符合的啊,调用自编函数后不该正确输出数据猜对啊。
2012-09-12 18:38
csy294745333
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2012-3-27
收藏
得分:0 
回复 4楼 Andony
但是源程序确实可以正确输出,我很费解
我认为gets(n);运行以后,n[0],n[1],n[2],n[3]会分别被赋予4个数字,

但是运行for(i=strlen(n);i>0;i--)

{
n[2*i]=n[i];
n[2*i-1]=' ';
}
以后,先把n[4]的值赋给n[8],n[7]赋值为空格字符,n[3]的值赋给n[6],n[5]赋值为空格字符,n[2]的值赋给n[4],n[3]赋值为空格字符,n[1]的值赋给n[2],n[1]赋值为空格字符,但是这与之前n字符数组存入数据的位置是不符合的啊,调用自编函数后不该正确输出数据猜对啊。
2012-09-12 18:38
csy294745333
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2012-3-27
收藏
得分:0 
回复 3楼 ldzy
输入完数组数值后应该存储情况为
 1    2    3    4
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]
但是理论上后面函数不应该正确运行才对啊,好比第一次n[8]=n[4],n[7]='\0',但是开始时n[4]并不是数字字符
2012-09-12 18:58
csy294745333
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2012-3-27
收藏
得分:0 
回复 4楼 Andony
输入完数组数值后应该存储情况为
 1    2    3    4
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]
但是理论上后面函数不应该正确运行才对啊,好比第一次n[8]=n[4],n[7]='\0',但是开始时n[4]并不是数字字符
2012-09-12 18:59
csy294745333
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2012-3-27
收藏
得分:0 
我重新整理下问题:
题目是输入四位数,然后每位中间空一个空格输出
:#include<stdio.h>
#include<string.h>
int main()
{
 void change(char n[]);
 char n[10];           //0-48
 printf("请输入一个四位数:\n");
 gets(n);
 change(n);
 return 0;
}
void change(char n[])
{
 int i;
 for(i=strlen(n);i>0;i--)
 {
  n[2*i]=n[i];
  n[2*i-1]=' ';
 }
 printf("转换后输出:\n%s\n",n);
}
这个程序我想了好多遍,字符数组的n[0]应该是一个空格啊,为什么输出时第一个直接是字符?
我认为gets(n);运行以后,n[0],n[1],n[2],n[3]会分别被赋予4个数字,
但是运行for(i=strlen(n);i>0;i--)
{
n[2*i]=n[i];
n[2*i-1]=' ';
}
以后,先把n[4]的值赋给n[8],n[7]赋值为空格字符,n[3]的值赋给n[6],n[5]赋值为空格字符,n[2]的值赋给n[4],n[3]赋值为空格字符,n[1]的值赋给n[2],n[1]赋值为空格字符,但是这与之前n字符数组存入数据的位置是不符合的啊,调用自编函数后不该正确输出数据猜对啊。
输入完数组数值后应该存储情况为
  1   2    3    4
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]
但是理论上后面函数不应该正确运行才对啊,好比第一次n[8]=n[4],n[7]='\0',但是开始时n[4]并不是数字字符
2012-09-12 20:56
Andony
Rank: 2
等 级:论坛游民
帖 子:38
专家分:60
注 册:2012-9-12
收藏
得分:0 
这个问题我也说不了是怎么回事,只觉得数组的存储很奇怪

重复的事情用心做,你就是赢家
2012-09-13 09:44
快速回复:C语言一个程序有不解之处,求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028558 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved