QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 953|回复: 9

别人都是有使不玩的劲,而我。。却总是有问不完的问题:)

[复制链接]
发表于 2004-12-7 22:28:15 | 显示全部楼层 |阅读模式
难道我就真的这么笨?我怎么做一个错一个?但是我总是自我感觉良好!....
劳驾兄弟们看我的代码:
[code:1]/*有一篇文章,共有3行。每一行共有80个字符,要求分别打印出英文大写和小写,数字,空格,以及其他字符的个数*/
#define m 3
#define n 100
main()
{
  char a[m][n];
  int i,j,k=0,l=0,o=0,p=0,q=0;
  printf("请输入三行字符,每行小于等于80个字符:\n");
  for(i=0;i<m;i++)
  {for(j=0;j<n&&(a[m-1][j]=getchar())!='\n';j++)
    a[m-1][j+1]='\0';}
  for(i=0;i<m;i++)
  {
    for(j=0;i<n&&a[m-1][j+1]!='\0';j++)
   if(a[i][j]>='A'&&a[i][j]<='Z')
    k+=1;   
    else if(a[i][j]>='a'&&a[i][j]<='z')
    l+=1;   
    else if((int)a[i][j]>=49&&(int)a[i][j]<=57)
    o+=1;   
    else if((int)a[i][j]==32)
    p+=1;   
    else if((int)a[i][j]>=1&&(int)a[i][j]<=31||(int)a[i][j]>=33&&(int)a[i][j]<=47||(int)a[i][j]>=58&&(int)a[i][j]<=64||(int)a[i][j]>=91&&(int)a[i][j]<=96||(int)a[i][j]>=123&&(int)a[i][j]<=254)
    q+=1;
   }     
    printf("大写字母数为=%d\n",k);
    printf("小写字母数为=%d\n",l);
    printf("数字个数为=%d\n",o);
    printf("空格数为=%d\n",p);
    printf("其他字符数为=%d\n",q);
}[/code:1]
我的编译结果:
[code:1]fydream@linux:~/源代码/unit 7> gcc -o dreamdead 710思考着.c
710思考着.c: In function `main':
710思考着.c:23: warning: comparison is always true due to limited range of data type
fydream@linux:~/源代码/unit 7> ./dreamdead
请输入三行字符,每行小于等于80个字符:
nihao nihao nihao
nihao nihao
nihao
大写字母数为=0
小写字母数为=17
数字个数为=0
空格数为=0
其他字符数为=13
fydream@linux:~/源代码/unit 7> ./dreamdead
请输入三行字符,每行小于等于80个字符:
ni hao
nihao
ni
大写字母数为=0
小写字母数为=6
数字个数为=0
空格数为=0
其他字符数为=6
fydream@linux:~/源代码/unit 7>
[/code:1]
明显的结果是错误的....
要是不控制行数。我可以很容易的写出正确的代码!但是一控制行数,我怎么??....谢谢兄弟们指教!:)
发表于 2004-12-7 23:19:04 | 显示全部楼层
考虑一下你的getchar='\n'改成其它的分隔符。
回复

使用道具 举报

 楼主| 发表于 2004-12-7 23:36:56 | 显示全部楼层
好的!我在好好想想!谢谢segaeno老兄,你一直都这么热心的帮助我!我表示严重的感谢!:)呵呵!:)
回复

使用道具 举报

发表于 2004-12-7 23:47:30 | 显示全部楼层
[quote:674f8bcc38="fydream"]好的!我在好好想想!谢谢segaeno老兄,你一直都这么热心的帮助我!我表示严重的感谢!:)呵呵!:)[/quote]快退休了,找个接班人撒!
回复

使用道具 举报

 楼主| 发表于 2004-12-8 09:12:57 | 显示全部楼层
论坛这么多厉害的兄弟!你一定可以找到的!:)
回复

使用道具 举报

发表于 2004-12-8 13:31:05 | 显示全部楼层
> 难道我就真的这么笨?我怎么做一个错一个?但是我总是自我感觉良好!....

有很多原因,一是因为你不动脑筋,不去自己想办法解决问题,而是依赖于别人帮你找原因,自然难以提高,问题不断;二是回答你的人不动脑筋,就事论事,教你问题的答案,而不是教你解决问题之道,自然教了半天还是问题不断。其实解决你的问题很简单,给你gdb就可以了。如果你不知道怎么用gdb,RTMF (Read The Fu*king Manual)。好了,整个世界清静了很多。
回复

使用道具 举报

 楼主| 发表于 2004-12-8 16:14:53 | 显示全部楼层
谢谢!
人都是需要帮助的!如果我不动脑筋,我就不用在学了!
书有,不是不看,而是毕竟我不是什么天才,一看就明白,都是需要实践的,
一实践难免会有错误,有错误,一定会先想想怎么解决,现在的水平就这么高儿。。
而且只是不够丰富,所以我就要提问。
回帖帮助我的!如果他也不动脑筋,那他也就不用回帖了!
毕竟每个人都有不同的解决办法,象segaeno老兄,让我用不同的结束符试试,象老兄你,让我用gdb,这就有两种方法可以用来解决问题,这样我就知道了两种解决办法,这样我对c语言和linux的了解有多了一点,我觉得这也是提高。
所以说,只要不是水贴,那每一个回帖都是值得去思考,却学习的。
所以说,不能说回帖的人没有动脑筋!
虽然我不同意老兄你的看法,但是今天你回了我的贴,而且告诉我用gdb,那我就得感谢你!
严重感谢!:)
回复

使用道具 举报

 楼主| 发表于 2004-12-8 18:16:37 | 显示全部楼层
[code:1]/*有一篇文章,共有3行。每一行共有80个字符,要求分别打印出英文大写和小写,数字,空格,以及其他字符的个数*/
#define m 3
#define n 100
main()
{
  char a[m][n]={{'A','S','D','B','G','N','\0'},{'f','e','n','g','y','a','n','\0'},{'1','2','3','4','\0'}};
  int i,j,k=0,l=0,o=0,p=0,q=0;
  printf("请输入三行字符,每行小于等于80个字符:\n");
  for(i=0;i<m;i++)
  {
    for(j=0;i<n&&a[i][j]!='\0';j++)
   if(a[i][j]>='A'&&a[i][j]<='Z')
    k+=1;   
    else if(a[i][j]>='a'&&a[i][j]<='z')
    l+=1;   
    else if((int)a[i][j]>=49&&(int)a[i][j]<=57)
    o+=1;   
    else if((int)a[i][j]==32)
    p+=1;   
    else if((int)a[i][j]>=1&&(int)a[i][j]<=31||(int)a[i][j]>=33&&(int)a[i][j]<=47||(int)a[i][j]>=58&&(int)a[i][j]<=64||(int)a[i][j]>=91&&(int)a[i][j]<=96||(int)a[i][j]>=123&&(int)a[i][j]<=254)
    q+=1;
   }     
    printf("大写字母数为=%d\n",k);
    printf("小写字母数为=%d\n",l);
    printf("数字个数为=%d\n",o);
    printf("空格数为=%d\n",p);
    printf("其他字符数为=%d\n",q);
}[/code:1]
[code:1]fydream@linux:~/源代码/unit 7> gcc -ggdb3 -o dreamdead 710思考着.c
710思考着.c: In function `main':
710思考着.c:20: warning: comparison is always true due to limited range of data type
fydream@linux:~/源代码/unit 7> ./dreamdead
请输入三行字符,每行小于等于80个字符:
大写字母数为=6
小写字母数为=7
数字个数为=4
空格数为=0
其他字符数为=0 [/code:1]
经过stll老兄的指点,我用gdb进行了调试,
我现break main
然后step一步一步观察,发现程序确实在segaeno老兄所说的地方总是过不去!
所以我就针对这个错误做了一个就算是实验吧,结果就可以正常运行了!:)
现在我就可以慢慢的改正了,我严重的感谢二位的帮助!:)
回复

使用道具 举报

发表于 2004-12-9 12:09:38 | 显示全部楼层
good
回复

使用道具 举报

发表于 2004-12-9 12:18:12 | 显示全部楼层
[quote:fbe35c6f75="tii"]> 难道我就真的这么笨?我怎么做一个错一个?但是我总是自我感觉良好!....

有很多原因,一是因为你不动脑筋,不去自己想办法解决问题,而是依赖于别人帮你找原因,自然难以提高,问题不断;二是回答你的人不动脑筋,就事论事,教你问题的答案,而不是教你解决问题之道,自然教了半天还是问题不断。其实解决你的问题很简单,给你gdb就可以了。如果你不知道怎么用gdb,RTMF (Read The Fu*king Manual)。好了,整个世界清静了很多。[/quote]有道理。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 23:37 , Processed in 0.118482 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表