首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

for循环输入遇到的有关问题,各位大侠。

2012-09-06 
for循环输入遇到的问题,求助各位大侠。。。以下是我的代码,当我用for循环输入时,第一次以下出来两个输入,第一

for循环输入遇到的问题,求助各位大侠。。。
以下是我的代码,当我用for循环输入时,第一次以下出来两个输入,第一次的输入直接跳过了,这是怎么回事啊?
#include<stdio.h>
#include<string.h>
#include<strlib.h>
#define INIT_SIZE 100

char* getlongstr()
void sort(char* p[],int num);
main()
{
int i,j,n,ret;
int len[N];
char *str[N],*strcopy = NULL;
/*输入一个字符串数组,元素个数用户自定*/
printf("how many strings will be inputed: ");
scanf("%d",&n);
for(i = 0 ;i<n ;i++){
printf("input the %dst string:\n",i+1);
str[i] = getlongstr();
}
}
/*选择法排序*/
void sort(char* p[],int num)
{
int i,j,k;
char *temp;
for(i=0;i<num-1;i++){
k=i;
for(j=i+1;j<num;j++){
if(mystrcmp(p[k],p[j])>0){
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
}
/*按照用户实际输入的字符个数来合理分配内存空间.size是用户实际输入
的字符串个数,bufsize是容许的最高限度,用户输入超过规定限度,就重
新分配两倍的新内存空间*/
char* getlongstr()
{
char *line,*newline;
int ch,size=0,buf_size=0;
line = (char *)malloc(INIT_SIZE);
buf_size = INIT_SIZE;
while((ch = getchar()) !='\n' && ch != EOF){
if(size == buf_size-1){
newline = (char *)malloc(2*buf_size);
line[size] = '\0';
strcpy(newline,line);
free(line);//释放旧的内存
line = newline;
}
line[size++] = ch;
}
line[size] = '\0';
newline = (char *)malloc(size+1);//分配合适大小的内存
strcpy(newline,line);
free(line);
return newline;
}


[解决办法]
没有头文件啊?!目测没问题啊
[解决办法]
/*输入一个字符串数组,元素个数用户自定*/
printf("how many strings will be inputed: ");
scanf("%d",&n);
getchar();//增加一行,这时输入缓冲区里还有上一行输入的一个回车,把它过滤掉,否则会干扰for(i = 0 ;i<n ;i++){
printf("input the %d string:\n",i+1);

探讨
引用:
都是低级错误。
#include<stdio.h>
#include<string.h>
#include<strlib.h> 库函数名也写错了,
#define INIT_SIZE 100

char* getlongstr()没带分号
void sort(char* p[],int num);
main()
{
int i,j,n,ret;
in……

[解决办法]
可以在出现问题的那输入语句前面加入这个 fflush(stdin); 试试看
[解决办法]
 getchar 由宏实现:#define getchar() getc(stdin)。getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.

为了避免这个错误,在getchar();的前面执行 fflush(stdin);就是清楚缓存;

热点排行