读取多行字符串,以”end“为结束行
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
* 读取多行字符串,以”end“为结束行
*/
int main()
{
int i;
int sum=0;
char **str =(char **)calloc(1,sizeof(char *));
for(i=0;i<200;i++){
str[i] = (char *)calloc(10,sizeof(char));
scanf("%s",str[i]);
sum++;
if(strcmp(str[i],"end")==0){
break;
}
}
//字符串拷贝
char **str2 =(char **)calloc(1,sizeof(char *));
for(i=0;i<sum;i++){ //sum为读取行数
str2[i] = (char *)calloc(10,sizeof(char));
memcpy(str2[i], str[i], strlen(str[i])+1);
}
for(i=0;i<sum;i++){
printf("%s\n",str[i]);
free(str[i]);
}
free(str);
for(i=0;i<sum;i++){
printf("%s\n",str2[i]);
free(str2[i]);
}
free(str2);
return 0;
}
读取n行字符串
#include<stdio.h>
#include<stdlib.h>
/*
*读取b行字符串
*/
int main()
{
int a,b;
scanf("%d %d", &a, &b);
int i;
char **str =(char **)calloc(1,sizeof(char *));
for(i=0;i<b;i++){
str[i] = (char *)calloc(10,sizeof(char));
scanf("%s",str[i]);
}
for(i=0;i<b;i++){
printf("%s\n",str[i]);
free(str[i]);
}
free(str);
return 0;
}
针对每次读取都需要输出值时:
int main()
{
int n,k,m;
while(scanf("%d%d%d",&n,&k,&m)&&n)
{
...
printf(...);
}
}