LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 805|回复: 9

一个程序里有一部分看不懂?

[复制链接]
发表于 2003-8-21 21:46:38 | 显示全部楼层 |阅读模式

  1. #include <stdio>

  2. int main(void)
  3. {
  4. int y[5];
  5. …………
  6. while(gets(y) != NULL && y[0] != '\0');//这句是什么意思,去掉其中某一个会有什
  7.                                                             //结果。
  8. …………
  9. }
复制代码
发表于 2003-8-21 21:55:55 | 显示全部楼层
获取一行输入并且输入不为空。
发表于 2003-8-22 02:33:02 | 显示全部楼层
你给的程序源码有点问题:
int y[5];
y 是数组名,可以理解为指向 int 数组的指针,指针y 包含了数组首地址。
gets(y)
gets 接受一行输入,括号里的参数是一个指向字符的指针,所以这里的得修改:

  1. #include <stdio.h>
  2. #define SIZE 5

  3. int main ()
  4. {
  5.         char y[SIZE];

  6.         printf ("please, input a line: \n");

  7.         while(gets(y) != NULL && y[0] != '\0') {
  8.             int i;
  9.             for ( i = 0; i <= SIZE - 1; i++)
  10.                 printf ("%c", y[i]);
  11.         printf ("\n");
  12.         }

  13. }
复制代码

运行程序试一下就知道 while(gets(y) != NULL && y[0] != '\0'); 的意思了:
当输入为空输入结束或输入以0结束,退出循环,否则可以重复输入。
发表于 2003-8-22 07:48:36 | 显示全部楼层
缓冲这么小,很容易溢出的。最好 不要用gets()。
 楼主| 发表于 2003-8-22 14:31:10 | 显示全部楼层
谢谢
 楼主| 发表于 2003-8-22 20:09:42 | 显示全部楼层
还 有一点忘问了,NULL和‘\0'各代表什么?
发表于 2003-8-22 20:29:58 | 显示全部楼层
NULL和'\0'都是0,一般比较的时候如果是int就写0,是指针就写NULL,是字符就写'\0',这样比较清楚。
 楼主| 发表于 2003-8-22 20:45:01 | 显示全部楼层
照这么说法,那 gets(y) != NULL && y[0] != '\0' 的意思就是当y是空指时和y[0]是空字符时,就退出循环。是这样子吗?
发表于 2003-8-22 20:51:15 | 显示全部楼层
y[0]不是空字符,而是0。
 楼主| 发表于 2003-8-23 09:32:02 | 显示全部楼层
明白了,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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