标题:[求助]C语言中字符串的输入问题?
取消只看楼主
joylmj
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-2-25
 问题点数:0 回复次数:6 
[求助]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
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
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
joylmj
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-2-25
得分:0 
明白了,谢谢神vLinux飘飘

[此贴子已经被作者于2006-5-10 14:59:47编辑过]


努力学习C语言中!
2006-05-10 14:10
joylmj
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-2-25
得分:0 
以下是引用论坛在2006-5-10 14:05:00的发言:
流中有个回车,把它处理掉

以前好像没有接触过流,它在C语言的哪个部分呢?
不好意思啊,有点烦哦,现在还是只C语言的小菜鸟,正在努力学习中。


努力学习C语言中!
2006-05-10 14:16
joylmj
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-2-25
得分:0 
以下是引用论坛在2006-5-10 14:16:00的发言:

//把相同的字符输出,
//可是在输出相同字符的同时,总是会在结果后面出现一些乱码,也不知道是什么原因。
#include <stdio.h>
#include <conio.h>

int main(void)
{
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();

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

printf("%s\n",str1);

getch();
return 0;
}



真的可以了,没有再出现乱码,实际上就是在str1字符数组后面加上一个结束符号,这样解释可以吗?


努力学习C语言中!
2006-05-10 14:33



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




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

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