这是我关于堆栈溢出的第一篇文章,我想为我的英语道歉,因为我不是母语为英语的人。无论如何,我自己编程很自学,所以显然我不是很擅长。我得到了一些编程练习(从大学的朋友那里得到它们)以获得一些经验,但我遇到了某个问题。练习要求创建一个由用户提供的10个名称和一个销售名称的数组。程序应该将第一个数组的内容传递给另外两个数组,一个具有管理超过6000个销售的名称,另一个具有未设置的数据。第一个阵列上的奖金为他们的奖金500分,其他奖金为200分。该计划应计算奖金的公司总成本并在屏幕上打印。该程序还应该打印两个名称数组。
更新:我决定先解决问题而不使用动态内存分配。这样做效果很好,但由于某种原因而不是每一个都打印姓氏。
#include <stdio.h>
#include <stdlib.h>
int c =0;
int x =0;
int i;
int sum_500 =0;
int sum_200 =0;
char* names_500[10];
char* names_200[10];
char* names[10];
int sales[10];
char buffer[200];
char trash[10];
int main() {
for (i =0; i<10; i++) {
printf("Give name:");
fgets(buffer,201,stdin);
names[i] = buffer;
printf("Give sales profit:");
scanf("%d",&sales[i]);
fgets(trash,11,stdin);
if (sales[i] > 6000) {
names_500[c] = names[i];
sum_500 = sum_500 + 500;
c++;
}
else {
names_200[x] = names[i];
sum_200 = sum_200 + 200;
x++;
}
}
if( c>0) {
for(i =0; i<c; i++) {
printf("%s\n",names_500[i]);
}
}
if (x>0) {
for(i =0; i<x; i++) {
printf("%s\n",names_200[i]);
}
}
printf("Company total bonus cost:%d",sum_200 + sum_500);
return 0;
}
更新:我明白了。似乎我将指向缓冲区变量的指针传递给名称数组,因此它们都打印了最后一个字符串。使用strdup()解决了这个问题。这是最终代码,包括名称数组的动态内存分配。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int c =0;
int x =0;
int i;
int sum_500 =0;
int sum_200 =0;
char ** names_500;
char ** names_200;
char * name;
int sales[10];
char buffer[40];
char trash[10];
int main() {
for (i =0; i<10; i++) {
printf("Give name:");
fgets(buffer,40,stdin);
name = strdup(buffer);
printf("Give sales profit:");
scanf("%d",&sales[i]);
fgets(trash,11,stdin);
if (sales[i] > 6000) {
names_500= realloc(names_500,(c+1)*sizeof(char*));
names_500[c] = name;
sum_500 = sum_500 + 500;
c++;
}
else {
names_200= realloc(names_200,(x+1)*sizeof(char*));
names_200[x] = name;
sum_200 = sum_200 + 200;
x++;
}
}
if( c>0) {
printf("500 bonus :\n");
for(i =0; i<c; i++) {
printf("%s",names_500[i]);
}
}
if (x>0) {
printf("200 bonus:\n");
for(i =0; i<x; i++) {
printf("%s",names_200[i]);
}
}
printf("Company 200 bonus costs:%d",sum_200 );
printf("\nCompany 500 bonus costs:%d",sum_500);
return 0;
}
答案 0 :(得分:1)
输入第一个销售号后,程序崩溃。
&
的参数中缺少scanf
程序崩溃的原因。它应该是
scanf("%d",&sales[i]);
旁注:
分配names[i]
没有用,因为在names[i] = buffer;
names[i] = malloc(strlen(buffer));
names[i] = buffer;
和names_500[c]
names_500[c] = malloc(strlen(names[i]));
names_500[c] = names[i];