我的代码的目标是让用户,将任意数量的学生作为整数放入,然后让程序反复询问每个整数(学生)的名称
我一直在尝试这么多不同的事情,而且我一直在努力解决这个问题而没有使用任何外部帮助几个小时,但我无法理解这一点。 (如果它的东西很明显,请不要成为超级明星,我只是初学者)
#include <cs50.h>
#include <string.h>
#include <stdio.h>
int main (void)
{
printf("How many students are there? ");
int amount = atoi(GetString());
printf("amount = %i\n", amount);
char *names[amount];
for(int i = 0; i < amount; i++)
{
printf("Enter the ellement #%d :", i +1);
scanf("%s", names[i]);
}
for (int i = 0; i == 0;)
{
printf("Acces student: ");
string search = GetString();
int searchnr = atoi(search);
printf("Student #%d is %s\n", searchnr, names[searchnr]);
}
}
>
}
答案 0 :(得分:2)
显而易见的解决方案:
for (int i = 0; i < amount; i++) {
printf("Enter element #%d: ", i + 1);
names[i] = GetString();
}
关于第二个循环:它是一个无限循环。什么是终止条件?你需要把它放到for
循环的条件下,否则它永远不会终止。
如果您的意图 获得无限循环,那么更具可读性,更少混淆,更惯用的解决方案
while (1) {
// ...
}
或
for (;;) {
// ...
}
答案 1 :(得分:1)
您需要为这些字符串预留空间:
char *names[amount];
char s[100];
for(int i = 0; i < amount; i++)
{
printf("Enter the ellement #%d :", i +1);
scanf("%s", s);
names[i] = strdup(s);
}
或
char *names[amount];
char s[100];
size_t len;
for(int i = 0; i < amount; i++)
{
printf("Enter the ellement #%d :", i +1);
scanf("%s", s);
len = strlen(s);
names[i] = malloc(len + 1);
strcpy(names[i], s);
}
这个for循环:
for (int i = 0; i == 0;)
什么都不做,你想做什么? (如果你想永远循环,你可以使用for(;;)
)
答案 2 :(得分:0)
使用malloc
char temp[50];
for(int i = 0; i < amount; i++)
{
printf("Enter the ellement #%d :", i +1);
scanf("%s", temp);
names[i]=malloc(strlen(temp)+1);
strcpy(names[i],temp);
}
使用strdup
char temp[50];
for(int i = 0; i < amount; i++)
{
printf("Enter the ellement #%d :", i +1);
scanf("%s", temp);
names[i] = strdup(temp);
}
答案 3 :(得分:0)
你所有的答案都很棒,但这是最终解决方案:
#include <cs50.h>
#include <string.h>
#include <stdio.h>
int main (void)
{
printf("How many students are there? ");
int amount = atoi(GetString());
char *names[amount];
for(int i = 0; i < amount; i++)
{
printf("Enter the ellement #%d :", i +1);
names[i + 1] = GetString();
}
for (int i = 0; i == 0;)
{
printf("Acces student: ");
int search = atoi(GetString());
printf("Student #%d is %s\n", search, names[search]);
}
}
我知道我有一个无限循环,这只是暂时的,所以我不必一直重新运行命令。