骇客king 发表于 2015-8-17 14:03:40

scanf问题

#include <stdio.h>
void main()
{
        char c;
        int i,x;
        for(i=0;i<13;i++)
        {
                x=scanf("%c",&c);
        //        fflush(stdin);
                printf("%d\n",x);
                printf("%c\n",c);
        }
}
怎么scanf的返回值就没有看到过EOF和-1的字样,我想用迭代做这个字符串的输入,根本找不到停止条件。
这里我输入的是字符串,中间有空格之类的。
请大神帮忙解决一下~

ryxcaixia 发表于 2015-8-17 14:03:41

本帖最后由 ryxcaixia 于 2015-8-17 14:25 编辑

int main(void)
{
        char c;
        int ret;
        while((ret = scanf("%c", &c)) != EOF)
        {
                printf("%c \t %d\n", c, ret);
                fflush(stdin);
        }
        printf("EOF == %d\n", ret);

        return 0;
}
scanf有返回值
EOF就是-1
少年 这段 在你输入字符的时候 按一下ctrl + c 就能看到-1了

骇客king 发表于 2015-8-17 14:07:03

scanf()!=EOF,这个返回值没有啊,scanf压根就没有返回EOF 是什么意思?

ryxcaixia 发表于 2015-8-17 14:19:27

EOF是一个宏 本身就代表了int(-1)
#define EOF   (-1)
这是stdio.h里定义的

骇客king 发表于 2015-8-17 14:25:10

你们的意思,我要我按ctrl + c ?才会读入-1,我按下回车后,scanf的返回值永远不是-1?
我按ctrl + c 程序直接关了。。

骇客king 发表于 2015-8-17 14:27:01

大哥你的程序没看到-1

骇客king 发表于 2015-8-17 14:29:32

这个程序还是永远退补出去啊,你上机试试!

骇客king 发表于 2015-8-17 14:31:54

大哥还在吗?

ryxcaixia 发表于 2015-8-17 15:13:52

骇客king 发表于 2015-8-17 14:31
大哥还在吗?

EOF 是 end of file的意思
ctrl + c 意思就是结束输入
默认为是-1

你不加断点 自然程序结束


如果用的是vs系列 用F9打个断点

骇客king 发表于 2015-8-17 15:44:48

#include <stdio.h>

int pr()
{
        char c;
        scanf("%c", &c);
        if(c!=10)//10为换行可以退出,32为空格,当输入空格时退出.
        {
                printf("%c", c);
                pr();
        }
        else
        {
                return 0;
        }
}
int main(void)
{
        pr();
        printf("\n");
}

实现自动退出啦~

骇客king 发表于 2015-8-17 15:51:00

ryxcaixia 发表于 2015-8-17 15:13
EOF 是 end of file的意思
ctrl + c 意思就是结束输入
默认为是-1


就是说,-1这个值是人为输入进去,不是scanf读到回车后自动加上的哈~

骇客king 发表于 2015-8-17 15:58:50

ryxcaixia 发表于 2015-8-17 15:13
EOF 是 end of file的意思
ctrl + c 意思就是结束输入
默认为是-1


我按下ctrl + c,加了断点,调试器就报错了,还是没显示-1,是不是应该输入ctrl + z啊?

骇客king 发表于 2015-8-17 15:59:38

ryxcaixia 发表于 2015-8-17 15:13
EOF 是 end of file的意思
ctrl + c 意思就是结束输入
默认为是-1


我按下ctrl + c,加了断点,调试器就报错了,还是没显示-1,是不是应该输入ctrl + z啊?

ryxcaixia 发表于 2015-8-17 16:06:03

本帖最后由 ryxcaixia 于 2015-8-17 16:07 编辑

可以这么说 -1是人为定义的 你按了键盘的ctrl +c 等 就相当于丢了一个-1进去 相应输入流的末尾 这个输入可以是从文件 也可以从键盘
不同的操作系统可能不一样 windows一般是ctrl c linux下ctrl+d 或者ctrl+z多一些

桃花飞舞 发表于 2015-8-17 22:49:21

路过:call:
页: [1]
查看完整版本: scanf问题