用C赋予变量字符串数组

时间:2014-10-24 05:28:54

标签: c arrays string cs50

我的代码的目标是让用户,将任意数量的学生作为整数放入,然后让程序反复询问每个整数(学生)的名称

我一直在尝试这么多不同的事情,而且我一直在努力解决这个问题而没有使用任何外部帮助几个小时,但我无法理解这一点。 (如果它的东西很明显,请不要成为超级明星,我只是初学者)

#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]);
    }   
}

>

}

4 个答案:

答案 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]);
    }   
}

我知道我有一个无限循环,这只是暂时的,所以我不必一直重新运行命令。