| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2090 人关注过本帖
标题:有关输入一段话的问题
只看楼主 加入收藏
xfcy
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-9-15
收藏
 问题点数:0 回复次数:15 
有关输入一段话的问题
通过键盘输入一段话,但是getchar()只能从终端输入一个字符,用scanf函数格式控制字符s只能输入字符串 C程序设计 第三版(谭浩强)有关格式字符s是这样说明的:用来输入字符串,将字符串送到一个字符数组中,在输入是以非空白字符开始,以第一个空白字符结束。字符串以串结束标志‘ \0’作为七最后一个字符
如果我所输入的一段话中有空格怎么办,那不是一遇到空白就会结束
所以我用下面的程序
#include "stdio.h"
int main()
{ int a[3],i;
    printf("please input the sentences:\n");
    for(i=0;i<=2;i++)
      scanf("%s",&a[i]);
    for(i=0;i<=2;i++)
      printf("\n%s",a[i]);   
}
希望能通过循环一次一次的输入有空白的句子,但是运行时如果不按ENTER键的话可以输入很多中间有空白的句子,但是只要敲3次ENTER键就会让VC停止工作,而且还不会有输出
请教各位
搜索更多相关主题的帖子: 输入 
2008-10-08 22:24
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
程序代码:
#include<stdio.h>
#define N 10000
int main(void)
{
    char c,ch[N];
    int i=0,j;
    do
    {
        scanf("%c",&c);
        ch[i++]=c;
    }while(c!=EOF);
    for(j=0;j<i;j++)
        printf("%c",ch[j]);
    return 0;
    getch();
}
2008-10-08 23:26
xfcy
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-9-15
收藏
得分:0 
我运行了一下出现了一个警告‘getch’undefined assuming extern returning int
而且我不知道怎样是他停下来,即怎样输入EOF
谢谢
2008-10-09 21:42
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
输入EOF:按Ctrl+Z

广陵,为什么不用getchar?
还有,LZ你可以使用fgets(str,100,stdin)和scanf("%100[^\n]%*c",str)这两种方法。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-09 22:14
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 4# StarWing83 的帖子
to:SW
    谢谢指正,用getchar()也可以的。

    另外,把你的两种方法用了一下,fgets 和 scanf("%100[^\n]%*c",str)只能读到换行符或者EOF为止,但是如果用户想输入换行符,但不想结束输入,就不行了。所以,我选择了用上述的方法,只要在字符串长度范围之内,输入几个 \n 都没问题。

to:xfcy
    按ctrl+z就是结束标志。如果你的编译器出现了警告,可以把最后一行的getch();删除。
2008-10-09 23:38
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
to广陵:
通常,读文本文件都是一行一行地读的,这样比较好处理,如果你需要一次读完整个文件,还是建议使用fread/fwrite函数,比如:
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char arr[1001];
    fread(arr,1,1000,stdin);
    arr[1000] = '\0';
    puts(arr);

    return 0;
}



你的程序,如果用户输入超过了N,那就会发生溢出,这是很难Debug的错误,而我的就不会。

发现自己的代码中有个小Bug,可能造成puts非法访问内存,已经改过来了。

[[it] 本帖最后由 StarWing83 于 2008-10-10 00:48 编辑 [/it]]

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-10 00:12
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
thank you to SW:

    主要是又知道了一个函数,也知道了什么是stdin,呵~
2008-10-10 00:26
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
SW的这两招还真不错,学习一下

PS:难道scanf还能支持正则表达式?

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-10-10 08:19
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
恩,不过支持得很有限,其实只是支持[]和[^]而已……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-10 08:29
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
前段时间学VIM,现在看到支持正则表达式的东西都比较兴奋

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-10-10 08:59
快速回复:有关输入一段话的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026228 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved