puts和printf更深层次的区别(同一参数,却得出了不同的结果)
#include<stdio.h>#include<string.h>
#define N 4
void InStr(char *p[],int n)
{
int i;
printf("Please input string:\n");
for(i=0;i<n;i++)
{
printf("Please input %dTH string:\n",i+1);
gets(p[i]);
puts(p[i]); /*在这里也能正常输出,说明了已经接收到输入*/
}
printf("In string Over!\n");
}
void SortStr(char p[][20],int n)
{
int i,j;
char *temp=NULL;
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
if(strcmp(p[i],p[j])<0)
{
strcpy(temp,p[i]);
strcpy(p[i],p[j]);
strcpy(p[j],temp);
}
}
}
}
void FindStr(char p[][20],int n)
{
int i;
char *s=NULL;
printf("Please input string:");
gets(s);
for(i=0;i<n;i++)
{
if(strcmp(p[i],s)==0)
{
printf("OK!Find it\n");
printf("The num is %d",i+1);
break;
}
}
if(i==n)
{
printf("Not Find!");
}
}
void OutStr(char *p[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%dTH string is:%s\n",i+1,p[i]);/*用printf输出为NULL*/
puts(p[i]);/*这是我自己调试时加的,发现可以正常输出字符串*/
/*这就是问题的所在,两个的参数都是同一个地址,为什么输出就不同了呢*/
}
}
void main()
{
char a[N][20];
InStr(a,N);
/*SortStr(a,N); */
OutStr(a,N);
/* FindStr(a,N);*/
getch();
}#include<stdio.h>
#include<string.h>
#define N 4
void InStr(char *p[],int n)
{
int i;
printf("Please input string:\n");
for(i=0;i<n;i++)
{
printf("Please input %dTH string:\n",i+1);
gets(p[i]);
puts(p[i]); /*在这里也能正常输出,说明了已经接收到输入*/
}
printf("In string Over!\n");
}
void SortStr(char p[][20],int n)
{
int i,j;
char *temp=NULL;
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
if(strcmp(p[i],p[j])<0)
{
strcpy(temp,p[i]);
strcpy(p[i],p[j]);
strcpy(p[j],temp);
}
}
}
}
void FindStr(char p[][20],int n)
{
int i;
char *s=NULL;
printf("Please input string:");
gets(s);
for(i=0;i<n;i++)
{
if(strcmp(p[i],s)==0)
{
printf("OK!Find it\n");
printf("The num is %d",i+1);
break;
}
}
if(i==n)
{
printf("Not Find!");
}
}
void OutStr(char *p[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%dTH string is:%s\n",i+1,p[i]);/*用printf输出为NULL*/
puts(p[i]);/*这是我自己调试时加的,发现可以正常输出字符串*/
/*这就是问题的所在,两个的参数都是同一个地址,为什么输出就不同了呢*/
}
}
void main()
{
char a[N][20];
InStr(a,N);
/*SortStr(a,N); */
OutStr(a,N);
/* FindStr(a,N);*/
getch();
}