标题:[求助]C语言中字符串的输入问题?
只看楼主
joylmj
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-2-25
 问题点数:0 回复次数:18 
[求助]C语言中字符串的输入问题?
C语言中字符串的输入有两种方法:
char str[100];
一是: scanf("%s",str);
二是: gets(str);

但是下面两个程序,用不同的输入语句结果有一个是错误的.
程序一输出的结果错误.
#include "stdio.h"
main()
{ char str[100],c;
int i,count;
printf("input a array: \n");
scanf("%s",str);
printf("input a char: \n");
c=getchar();
count=0;
for(i=0;str[i]!='\0';i++)
if(c==str[i])
count++;
printf("count=%d\n",count);
}


程序二: 输出的结果正确
#include "stdio.h"
main()
{ char str[100],c;
int i,count;
printf("input a array: \n");
gets(str);
printf("input a char: \n");
c=getchar();
count=0;
for(i=0;str[i]!='\0';i++)
if(c==str[i])
count++;
printf("count=%d\n",count);
}


第一个程序中出现的错误是 c=getchar(); 这个语句不能执行,导致最后输出的count的值为0 .

如果更改了字符串输入语句后,整个程序就能够正确输出结果了.第二个程序能够正确输出结果.

但是字符串输入的两个语句功能都是一样的,为什么在运行时会出现不同的结果?

[此贴子已经被作者于2006-5-10 13:46:20编辑过]

搜索更多相关主题的帖子: C语言中 字符 count 输入 
2006-05-10 12:17
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
得分:0 

#include <stdio.h>
#include <conio.h>

int main(void)
{
char str[100],c;
int i,count;

printf("input a array: \n");
scanf("%s", str);

printf("input a char: \n");
fflush(stdin);
c = getchar();

count = 0;
for(i = 0; str[i] !='\0'; i++)
{
if(c == str[i])
{
count++;
}
}

printf("count=%d\n",count);

getch();
return 0;
}

[此贴子已经被作者于2006-5-10 12:28:24编辑过]


日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-10 12:21
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
得分:0 
楼主美女,你再写程序格式能好点吗?空格不占用内存,你怎么不舍得用啊

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-10 12:22
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
得分:0 
printf("input a array: \n");
scanf("%s",str);
getchar();/* 接受下回车 */

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-10 12:27
joylmj
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-2-25
得分:0 
以下是引用论坛在2006-5-10 12:21:00的发言:

#include <stdio.h>
#include <conio.h>

int main(void)
{
char str[100],c;
int i,count;

printf("input a array: \n");
scanf("%s", str);

printf("input a char: \n");
fflush(stdin);
c = getchar();

count = 0;
for(i = 0; str[i] !='\0'; i++)
{
if(c == str[i])
{
count++;
}
}

printf("count=%d\n",count);

getch();
return 0;
}



谢谢!改了之后,运行了一下可以了,可是为什么要这样改呢?有点不太明白。


努力学习C语言中!
2006-05-10 13:59
joylmj
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-2-25
得分:0 
以下是引用SunShining在2006-5-10 12:27:00的发言:
printf("input a array: \n");
scanf("%s",str);
getchar();/* 接受下回车 */


用了getchar()之后,程序就正确了,非常感谢,可是为什么这里要接受回车呢?


努力学习C语言中!
2006-05-10 14:02
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
int main(void){
char a[80];
int x;
scanf("%s",a);
x= getchar();
printf("%s,%d\n",a,x);
return 0;
}

你说这个程序为什么x=10?
提示:10是回车的ASCII码

淘宝杜琨
2006-05-10 14:03
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
得分:0 
流中有个回车,把它处理掉

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-10 14:05
joylmj
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-2-25
得分:0 
同类型的题目还存在一些问题,希望大家帮帮忙!
下面这个程序在原来的程序上作了一些改动,把相同的字符输出,可是在输出相同字符的同时,总是会在结果后面出现一些乱码,也不知道是什么原因。

#include "stdio.h"
#include "conio.h"
main()
{ char str[100],str1[100],c;
int i,j;
printf("input a array: \n");
scanf("%s",str);
printf("input a char: \n");
fflush(stdin);
c=getchar();
for(i=0,j=0;str[i]!='\0';i++)
if(c==str[i])
str1[j++]=str[i];
printf("%s\n",str1);
getch();
return 0;
}

努力学习C语言中!
2006-05-10 14:06
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
得分:0 
C99上面对于fflush 的定义...

int fflush(FILE *ostream);

ostream points to an output stream or an update stream in which the
most recent operation was not input, the fflush function causes any
unwritten data for that stream to be delivered to the host environment tobe written to the file
2006-05-10 14:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-63064-1-1.html




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

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