#include<stdio.h>
#include<string.h>
int main()
{
void sort(char s[][6]);
int i;
char str[10][6];
printf("input 10 strings:\n");
for(i=0;i<10;i++)
scanf_s("%s",str[i]);
sort(str);
printf("now,the sequence is:\n");
for(i=0;i<10;i++)
printf("%s\n",str[i]);
}
void sort(char s[10][6])
{
int i,j;
char *p,temp[10];
p=temp;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(strcmp(s[j],s[j+1])>0)
{
strcpy(p,s[j]);
strcpy(s[j],s[+j+i]);
strcpy(s[j+1],p);
}
}
顺带一提,这是按照书本打的,他的运行结果和我的不一样,怀疑书本错了,请假大神怎么实现这个语句
int i;
char str[10][6];
printf("input 10 strings:\n");
for(i=0;i<10;i++)
scanf_s("%s",str[i]);
7 个解决方案
#2
修改如下:
既然是照着书打的,就不应该打错。
#include<stdio.h>
#include<string.h>
void sort(char s[][6], int n); //第二个参数n是第一维的信息
int main()
{
int i;
char str[10][6];
printf("input 10 strings:\n");
for (i = 0; i < 10; i++)
scanf("%6s", str[i]);
sort(str, 10);
printf("now,the sequence is:\n");
for (i = 0; i < 10; i++)
printf("%s\n", str[i]);
return 0;
}
void sort(char s[10][6], int n)//这里的第一个维数10,加与不加都是不加的意思。
{
int i, j;
//char *p, temp[10];
//p = temp;
char tmp[6];
//冒泡排序
for (i = 1; i < n; i++)
for (j = 0; j < n - i; j++)
if (strcmp(s[j], s[j + 1])>0)
{
strcpy(tmp, s[j]);
strcpy(s[j], s[j + 1]);
strcpy(s[j + 1], tmp);
}
}
既然是照着书打的,就不应该打错。
#3
scanf_s还需要一个参数指定缓冲区有多大:
或者用scanf
scanf_s("%s",str[i], 6);
或者用scanf
#4
另外排序算法的实现也是有问题的
#5
你的代码我试过了,确实是这样子的,能不能解释下之前的[+j+1]是什么意思
#6
那个我想问下,我我用scanf_s的原因是因为用不了scanf,那么这个缓冲区是怎么回事呀
#7
谢谢,我已经自己查到了
#1
#2
修改如下:
既然是照着书打的,就不应该打错。
#include<stdio.h>
#include<string.h>
void sort(char s[][6], int n); //第二个参数n是第一维的信息
int main()
{
int i;
char str[10][6];
printf("input 10 strings:\n");
for (i = 0; i < 10; i++)
scanf("%6s", str[i]);
sort(str, 10);
printf("now,the sequence is:\n");
for (i = 0; i < 10; i++)
printf("%s\n", str[i]);
return 0;
}
void sort(char s[10][6], int n)//这里的第一个维数10,加与不加都是不加的意思。
{
int i, j;
//char *p, temp[10];
//p = temp;
char tmp[6];
//冒泡排序
for (i = 1; i < n; i++)
for (j = 0; j < n - i; j++)
if (strcmp(s[j], s[j + 1])>0)
{
strcpy(tmp, s[j]);
strcpy(s[j], s[j + 1]);
strcpy(s[j + 1], tmp);
}
}
既然是照着书打的,就不应该打错。
#3
scanf_s还需要一个参数指定缓冲区有多大:
或者用scanf
scanf_s("%s",str[i], 6);
或者用scanf
#4
另外排序算法的实现也是有问题的
#5
修改如下:
#include<stdio.h>
#include<string.h>
void sort(char s[][6], int n); //第二个参数n是第一维的信息
int main()
{
int i;
char str[10][6];
printf("input 10 strings:\n");
for (i = 0; i < 10; i++)
scanf("%6s", str[i]);
sort(str, 10);
printf("now,the sequence is:\n");
for (i = 0; i < 10; i++)
printf("%s\n", str[i]);
return 0;
}
void sort(char s[10][6], int n)//这里的第一个维数10,加与不加都是不加的意思。
{
int i, j;
//char *p, temp[10];
//p = temp;
char tmp[6];
//冒泡排序
for (i = 1; i < n; i++)
for (j = 0; j < n - i; j++)
if (strcmp(s[j], s[j + 1])>0)
{
strcpy(tmp, s[j]);
strcpy(s[j], s[j + 1]);
strcpy(s[j + 1], tmp);
}
}
既然是照着书打的,就不应该打错。
你的代码我试过了,确实是这样子的,能不能解释下之前的[+j+1]是什么意思
#6
scanf_s还需要一个参数指定缓冲区有多大:
scanf_s("%s",str[i], 6);
或者用scanf
那个我想问下,我我用scanf_s的原因是因为用不了scanf,那么这个缓冲区是怎么回事呀
#7
scanf_s还需要一个参数指定缓冲区有多大:
scanf_s("%s",str[i], 6);
或者用scanf
那个我想问下,我我用scanf_s的原因是因为用不了scanf,那么这个缓冲区是怎么回事呀
谢谢,我已经自己查到了