鱼C论坛

 找回密码
 立即注册
查看: 1749|回复: 14

scanf问题

[复制链接]
发表于 2015-8-17 14:03:40 | 显示全部楼层 |阅读模式
10鱼币
#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的字样,我想用迭代做这个字符串的输入,根本找不到停止条件。
这里我输入的是字符串,中间有空格之类的。
请大神帮忙解决一下~

最佳答案

查看完整内容

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了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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了

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
骇客king + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-8-17 14:07:03 | 显示全部楼层
scanf()!=EOF,这个返回值没有啊,scanf压根就没有返回EOF 是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-17 14:19:27 | 显示全部楼层
EOF是一个宏 本身就代表了int(-1)
#define EOF     (-1)
这是stdio.h里定义的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-8-17 14:25:10 | 显示全部楼层
你们的意思,我要我按ctrl + c ?才会读入-1,我按下回车后,scanf的返回值永远不是-1?
我按ctrl + c 程序直接关了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-8-17 14:27:01 | 显示全部楼层
大哥你的程序没看到-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-8-17 14:29:32 | 显示全部楼层
这个程序还是永远退补出去啊,你上机试试!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-8-17 14:31:54 | 显示全部楼层
大哥还在吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-17 15:13:52 | 显示全部楼层

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

你不加断点 自然程序结束
1.png

如果用的是vs系列 用F9打个断点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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");
}

实现自动退出啦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-8-17 15:51:00 | 显示全部楼层
ryxcaixia 发表于 2015-8-17 15:13
EOF 是 end of file的意思
ctrl + c 意思就是结束输入
默认为是-1

就是说,-1这个值是人为输入进去,不是scanf读到回车后自动加上的哈~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-8-17 15:58:50 | 显示全部楼层
ryxcaixia 发表于 2015-8-17 15:13
EOF 是 end of file的意思
ctrl + c 意思就是结束输入
默认为是-1

我按下ctrl + c,加了断点,调试器就报错了,还是没显示-1,是不是应该输入ctrl + z啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-8-17 15:59:38 | 显示全部楼层
ryxcaixia 发表于 2015-8-17 15:13
EOF 是 end of file的意思
ctrl + c 意思就是结束输入
默认为是-1

我按下ctrl + c,加了断点,调试器就报错了,还是没显示-1,是不是应该输入ctrl + z啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-17 16:06:03 | 显示全部楼层
本帖最后由 ryxcaixia 于 2015-8-17 16:07 编辑

可以这么说 -1是人为定义的 你按了键盘的ctrl +c 等 就相当于丢了一个-1进去 相应输入流的末尾 这个输入可以是从文件 也可以从键盘
不同的操作系统可能不一样 windows一般是ctrl c linux下ctrl+d 或者ctrl+z多一些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-17 22:49:21 | 显示全部楼层
路过:call:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 07:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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