0

我需要编写一个代码来实现这一点:您输入姓名和名字以及成绩。仅对于 >= 10 的成绩,您使用反向排序打印学生的姓名和名字。示例:

鲍勃
迪伦
12

罗伯特
帕特
9

克里斯
斯特罗齐
15

乔什
站
11

会给 :

克里斯·斯特罗齐 15 鲍勃·迪伦 12 乔什·斯塔 11.

我的错误在 strcpy 行:

函数“strncpy”的参数太少| assing 'strncpy' 的参数 1 使指针从整数而不进行强制转换

 char tab_nom[N][M] ;
 char tab_prenom[N][M] ;
 float tab_notes[N];
 char tmp_n, tmp_p;
 int i,j,tmp;

for (i=0;i<N;i++)
 {
  printf("Saisissez le nom %d :", i+1);
  scanf("%s",tab_nom[i]);
  printf("Saisissez le prenom %d :", i+1);
  scanf("%s",tab_prenom[i]);
  printf("Saisissez la note %d :", i+1);
  scanf("%f",&tab_notes[i]);
  }

 for (i=0;i<N;i++)
 {
      for(j=0; j< N-1 ; j++)
      {
          if (tab_notes[j] < tab_notes[j+1])
          {
              tmp=tab_notes[j];
              tab_notes[j]=tab_notes[j+1];
              tab_notes[j+1]=tmp;

              strcpy(tmp_n,tab_nom[j]);
              strcpy(tab_nom[j],tab_nom[j+1]);
              strcpy(tab_nom[j+1],tmp_n);

              strcpy(tmp_p,tab_prenom[j]);
              strcpy(tab_prenom[j],tab_prenom[j+1]);
              strcpy(tab_prenom[j+1],tmp_p);

          }
      }
}
4

3 回答 3

2

temp_n是单人charstrcpy需要char*

于 2012-10-17T12:56:54.190 回答
0
strncpy(tmp_n, tab_nom[j]);
/* ... */
strncpy(tmp_p,tab_prenom[j]);

您正在尝试以单个字符复制字符串...此外strncpy还有第三个参数 ( size)。试试strcpy吧。

于 2012-10-17T12:51:28.140 回答
0

首先,您正在使用strncpy而不是strcpy.

strncpy的定义如下

char *strncpy(char *restrict s1, const char *restrict s2, size_t n);

所以我认为您想将代码更改为

strncpy(tmp_n,tab_nom[j],sizeof(tmp_n));

否则,您可以strcpy(tmp_n, tab_nom[j]);在没有任何编译错误的情况下使用。

于 2012-10-17T12:52:12.163 回答