QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 931|回复: 5

输入函数的疑问????

[复制链接]
发表于 2005-6-21 06:13:40 | 显示全部楼层 |阅读模式
这是一个简单的程序
[code:1]
#include <stdio.h>
void stop();
int main(){
        int i;
        char str[20];
        for(i = 0; i < 5; i++){
                printf("Please enter a shell command:");
                scanf("%s\n",str);
                printf("%s\n",str);
        }
}
[/code:1]

这个程序的结果本应该是这样的:
Please enter a shell command:ls
ls
Please enter a shell command:ls
ls
Please enter a shell command:ls
ls
Please enter a shell command:ls
ls
Please enter a shell command:ls
ls

然而执行结果确不是这样的:

如果谁能知道原因,请指教,谢谢
(请用这个程序测试一下)
谢谢
发表于 2005-6-21 08:03:39 | 显示全部楼层
关注中!
我编译运行了一下,给我的感觉是scanf没有能及时将输入流中的数据写入str中,等printf输出后str的数据才得到更新,输出的数据不是刚输入的,而是前一次输入的.
请那位解解惑.
回复

使用道具 举报

发表于 2005-6-21 09:19:19 | 显示全部楼层
这样:

#include <stdio.h>
void stop();
int main(){
   int i;
   char str[20];
   for(i = 0; i < 5; i++){
      printf("Please enter a shell command:");
      scanf("%s",str);
      printf("%s\n",str);
   }
}
回复

使用道具 举报

发表于 2005-6-21 09:27:32 | 显示全部楼层
对了,这地方没有注意,
但能解释一下为什么多了/n会有上面的问题呢?
回复

使用道具 举报

发表于 2005-6-21 10:14:03 | 显示全部楼层
据我所知:一般情况下scanf不应该有其它字符,也不会打印在屏幕上,除非你要明确指出数据之间的分隔符,如
scanf("%d:%d",&x,&y);
在输入中你应该输入:4:5(回车)
因此, scanf("%s\n",str); 只是把\n当成数据分隔符,但恰好你后面又没有下一个需要的数据。

我是这么认为的。
回复

使用道具 举报

发表于 2005-6-21 13:26:04 | 显示全部楼层
输出缓冲方式问题,一般输出是行缓冲,也就是你printf了,也到输出缓冲区了,却没有真正在屏幕上显示。可以用fflush(stdout)强制输出。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-5 19:29 , Processed in 0.063621 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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