| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 412 人关注过本帖
标题:新手自学,遇到一个问题,求友爱大神
只看楼主 加入收藏
AiBMeng
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-4-21
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
新手自学,遇到一个问题,求友爱大神
事先声明:
   1:非常感谢各位的帮助。不论结果如何。
   2:希望各位大神不要纠结到这个代码如何麻烦或其他改进办法或者更好的办法得到想要的结果。希望首先解答出我提出的问题。

代码一
#include <stdio.h>
#include <stdlib.h>

int main()
{
 #define MAX 20
 char a[MAX];
 int n;
 n=0;
 while((a[n]=getchar())!='\n'&&n<MAX)
 {
    printf("%d %c\n",n,a[n]);
    n++;
    }
 if(n>19)
    printf("Too more characters input");
 printf("\n");
 printf("%s",a);
 return 0;
}
代码二:
 while((a[n]=getchar())!='\n'&&n<MAX)
 {
    printf("%d %c\n",n,a[n]);
    n++;
    }
 if(n>19)
    printf("Too more characters input");
 printf("\n");
 n=(n<=19)?n:19;
 for(m=0;m<=n;m++)
     printf("%c",a[m]);
 return 0;
}
代码三
#include <stdio.h>
int main()
{
 #define MAX 20
 char a[MAX];
 int m,n;
 n=0;
 while(getchar()!='\n'&&n<MAX)
 {
    a[n]=getchar();
    printf("%d %c\n",n,a[n]);
    n++;
    }
 if(n>19)
    printf("Too more characters input");
 printf("\n");
 n=(n<=19)?n:19;
 for(m=0;m<=n;m++)
    printf("%c",a[m]);
 return 0;
}
声明:原先并没有用while语句里面的printf语句,只是自己不明所以,想追踪一下a[n]和n的值。结果又遇到了问题。
问题一:代码2和3中a[n]=getchar()放在条件内和放在执行语句内,有什么区别,为什么输出结果不同?
问题二:为什么当while条件为真时,他的执行语句Printf不会立即执行?要等到按下回车才执行?
问题三:比如我们输入了第21个字符,那么应该n<MAX为假,这时为什么不会跳出While语句,执行其后的语句呢?会一直能够输出,直到按下回车。
问题四:为什么代码1和2的执行结果会不同呢??顺序输出数组a[n]和输出字符串a有什么不同??为什么字符串输出会输出21位呢??最后一位怎么保存的??
以下是我自己电脑的输出结果,用的code blocks 10.05,是按代码顺序发的(应该没错)。
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

[最后,不论如何,谢谢各位。
第一次发帖。我承认,没有仔细阅读过规范之类的东西。。。。。
搜索更多相关主题的帖子: return 
2011-04-22 22:15
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:7 
以下是引用AiBMeng在2011-4-22 22:15:53的发言:

我承认,没有仔细阅读过规范之类的东西。。。。。

那就去仔细阅读一下
2011-04-23 02:20
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:7 
这个程序貌似有点问题。最后输出是以字符串的形式输出的。应该输入19个字符吧,输入20个好像溢出了。
收到的鲜花
  • AiBMeng2011-04-24 07:28 送鲜花  3朵   附言:首先谢谢这位大神,有自己的评论。
2011-04-23 07:57
夭折的蓓蕾
Rank: 2
等 级:论坛游民
帖 子:24
专家分:24
注 册:2011-4-23
收藏
得分:7 
1.getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码. getchar放在条件中,起判断作用,运行中不会显示,只有在函数体内才会显示。
2.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).
3.输入的数据都存放在缓存区中,都未运行,只有按回车键,才开始运行
4.系统在生成字符串时,会自动在最后一位加‘/n’  
收到的鲜花
  • AiBMeng2011-04-24 16:54 送鲜花  3朵   附言:晕,不好意思,本来是给你分的,没想到给到 ...
2011-04-23 11:35
快速回复:新手自学,遇到一个问题,求友爱大神
数据加载中...
 
   



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

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