#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
void sort(char **p)
{
char **q, **s, *t;
for (q = p; q < p + 4; q++)
{
for (s = q + 1; s < p + 5; s++)
{
if (strcmp(*q, *s) > 0)
{
t = *q;
*q = *s;
*s = t;
}
}
}
}
int main()
{
char *a[5], b[5][99], **p;
int i;
for (i = 0; i < 5; i++)
a[i] = b[i];
printf("请依次输入五个字符串:\n");
for (i = 0; i < 5; i++)
scanf("%s", a[i]);
p = a;
sort(p);
printf("排序后输出为:\n");
for (i = 0; i < 5; i++)
{
printf("%s\n", a[i]);
}
system("pause");
return 0;
}
运行效果:
scanf函数用法:
scanf("输入控制符",输入参数);
功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。
用scanf()函数以%s格式读入的数据不能含有空白符时,所有空白符都被当做数据结束的标志。所以题中函数输出的值只有空格前面的部分。
如果想要输出包括空格在内的所有数据,可以使用gets()函数读入数据。gets()函数的功能是读取字符串,并存放在指定的字符数组中,遇到换行符或文件结束标志时结束读入。换行符不作为读取串的内容,读取的换行符被转换为字符串结束标志'\0'。
我把scanf_s和strcpy_s改了下就好了。。,你那个拷贝的问题,t数组的长度不够。
长度小于5的话还能用用,大于5的话需要变成t[20]。
/*输入5个字符串,按由小到大的顺序输出。*/
#include
#include
int main(void)
{
int i,j;
char a[5][20], t[20];//改大了点,不然字符串太长会超出数组范围
printf("Enter 5 strings:\n");
for (i = 0; i < 5; i++)
{
scanf("%s",a[i]);
}
for (i = 1; i < 5; i++)
{
for (j =0; j < 5-i ;j++)
if (strcmp(a[j], a[j+1]) > 0)
{
strcpy(t,a[j]);
strcpy(a[j], a[j + 1]);
strcpy(a[j + 1], t);
}
}
printf("After sorted:\n");
for (i = 0; i < 5; i++)
puts(a[i]);
return 0;
}
#include
#include
int main(void)
{
int i,j;
char a[5][20], t[20];
for (i = 0; i < 5; i++){
scanf("%s",a[i]);}
for (i = 1; i < 5; i++){
for (j =0; j < 5-i ;j++)
if (strcmp(a[j], a[j+1]) > 0){
strcpy(t,a[j]);
strcpy(a[j],a[j + 1]);
strcpy(a[j + 1],t);
}
}
printf("After sorted:\n");
for (i = 0; i < 5; i++)
puts(a[i]);
return 0;
}
scanf_s("%s",a[i]);改成scanf_s("%s",a[i], 20);试试
puts(a[i]); //应该用putchar(a[i]) 吧