更新字符串数组用C

我定义在主函数的字符串数组" title="字符串数组">字符串数组,我想更新它的另一个函数内部如下:更新字符串数组用C

#include <stdio.h> 

#define SIZE 15

void read_arrays(char *competitors[SIZE], float points[SIZE], int numOfCompetitors)

{

for (int cntr = 0; cntr < numOfCompetitors; cntr++)

{

printf("Enter the name of competitor %d", cntr+1);

scanf("%s", &*competitors[cntr]);

printf("Enter the point of competitor %d", cntr+1);

scanf("%f", &points[cntr]);

}

}

int main()

{

char *competitors[SIZE];

float points[SIZE];

int numOfCompetitors = 0;

while (numOfCompetitors > 15 || numOfCompetitors < 1)

{

printf("Enter the number of competitors: ");

scanf("%d", &numOfCompetitors);

if (numOfCompetitors > 15) printf("Number of competitors cannot be more than 15!\n");

}

read_arrays(&*competitors[SIZE], &points[SIZE], numOfCompetitors);

printf("%f", points[0]);

}

,但我得到了以下错误:

cc  homework2.c -o homework2 

homework2.c: In function ‘main’:

homework2.c:28:14: warning: passing argument 1 of ‘read_arrays’ from incompatible pointer type [-Wincompatible-pointer-types]

read_arrays(&*competitors[SIZE], &points[SIZE], numOfCompetitors);

^

homework2.c:5:6: note: expected ‘char **’ but argument is of type ‘char *’

void read_arrays(char *competitors[SIZE], float points[SIZE], int numOfCompetitors)

我想在循环中用scanf分配字符串数组中的值。我如何设法做到这一点?

回答:

您可以在将它传递给函数时使用变量的名称,还需要指定char矩阵的大小(〜字符串数组)。

所以这个:read_arrays(&*competitors[SIZE], &points[SIZE], numOfCompetitors);

变为:read_arrays(competitors, points, numOfCompetitors);

全码:

#include <stdio.h> 

#define SIZE 15

void read_arrays(char competitors[SIZE][30], float points[SIZE], int numOfCompetitors)

{

for (int cntr = 0; cntr < numOfCompetitors; cntr++)

{

printf("Enter the name of competitor %d", cntr+1);

// We read up to 29 characters => no overflow as the size is up to 30

scanf("%29s", competitors[cntr]);

printf("Enter the point of competitor %d", cntr+1);

scanf("%f", &points[cntr]);

}

}

int main()

{

char competitors[SIZE][30];

float points[SIZE];

int numOfCompetitors = 0;

while (numOfCompetitors > 15 || numOfCompetitors < 1)

{

printf("Enter the number of competitors: ");

scanf("%d", &numOfCompetitors);

if (numOfCompetitors > 15) printf("Number of competitors cannot be more than 15!\n");

}

read_arrays(competitors, points, numOfCompetitors);

printf("%s", competitors[0]);

printf("%s", competitors[1]);

printf("%f", points[0]);

}

回答:

作为一种替代丹尼尔ILLESCAS你可以只对每个竞争对手,你输入分配空间。一定要稍后释放它们。

#include <stdio.h> 

#define SIZE 15

void read_arrays(char *competitors[SIZE], float points[SIZE], int numOfCompetitors)

{

for (int cntr = 0; cntr < numOfCompetitors; cntr++)

{

competitors[cntr] = (char*)calloc(1, 32);

printf("Enter the name of competitor %d", cntr + 1);

scanf("%s", competitors[cntr]);

printf("Enter the point of competitor %d", cntr + 1);

scanf("%f", &points[cntr]);

}

}

int main()

{

char *competitors[SIZE];

float points[SIZE];

int numOfCompetitors = 0;

while (numOfCompetitors > 15 || numOfCompetitors < 1)

{

printf("Enter the number of competitors: ");

scanf("%d", &numOfCompetitors);

if (numOfCompetitors > 15) printf("Number of competitors cannot be more than 15!\n");

}

read_arrays(competitors, points, numOfCompetitors);

printf("%f", points[0]);

}

以上是 更新字符串数组用C 的全部内容, 来源链接: utcz.com/qa/257795.html

回到顶部