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);