0

我正在读取来自stdin例如汽车名称、汽车类型的输入。

我面临的问题是,如果我输入了汽车数量 2 并在循环中输入,第二个值将通过scanf.

输入汽车数量:2

输入列名称:chevy

可用的汽车类型可以是电动,汽油 - 输入汽车类型:汽油

输入列名称:chevy2

可用的汽车类型可以是电动,汽油 - 输入汽车类型:电动

现在如果我打印我看到的都是电动的

 #include <stdio.h>

    int main(int argc, char *argv[])
    {
        setbuf(stdout, NULL);
        int carNum;
        int i;

        char carName[50];
        char carType[200];

        printf("\nEnter number of cars:");
        scanf("%d",&carNum);
        for(i=0;i<carNum;i++)
         {
             printf("\nEnter name of car :");
     scanf("%s", &carName[i]);

     printf("\nType of car available can be electric,gas - Enter type of car %d: ");                             
     scanf("%s", &carType[i]);
         }

         for(i=0;i<carNum;i++)
         {

             printf("\nName of car %d: ",i+1);
             printf("\n%s", &carName[i]);


             printf("\nType of car %d: ",i+1);
             printf("\n%c", &carType[i]);
         }  


        return 0;
    }
4

2 回答 2

2

编辑 新答案:

正如您所展示的,您需要读取一些汽车名称和类型您需要字符串数组carNamecartype不是简单的字符数组。喜欢(对于论文解决方案):

 #define LEN 100     // declare sufficient length size 

 char carName[50][LEN];   // in main()
 char carType[50][LEN];

你正确的 scanf 和 printf 语句应该是这样的:

scanf("%d",&carNum);
for(i=0;i<carNum;i++){
    printf("\nEnter name of car :");
    scanf("%s", carName[i]);
    printf("\nType of car available can be electric,gas - Enter type ofcar: ");
    scanf("%s", carType[i]);
}
for(i=0;i<carNum;i++){
    printf("\nName of car %d: ",i+1);
    printf("\n%s", carName[i]);
    printf("\nType of car %d: ",i+1);
    printf("\n%s", carType[i]);
}    

注意:当我用户时,我在 scanf 和 printf 中作为参数%s给出char*
旧答案: 在第一个 for 循环中,您的 scanf 语句是错误的:

     scanf("%s", &carName[i]);
                          ^  remove [i]
     scanf("%s", &carType[i]);
                          ^  remove [i]

你只需要这样写:

    // printf
    scanf("%s", &carName);
    //print                    
    scanf("%s", &carType);

在 printf 语句的第二个循环中是错误的。

printf("\n%c", &carType[i]);
               ^  not need

正确的是

printf("\n%c", carType[i]);   

另外我认为您的要求是:

printf("\n%s", carType);
于 2013-03-30T18:19:20.153 回答
2

您声明的数组不代表字符串,它代表由 50 个字节和 200 个字节组成的连续内存。这足以分别存储一个 50 个字符的字符串和 200 个字符的字符串。你需要的是一个字符串数组,像这样声明。

char * carnames[MAX_INPUT];

我建议你创建一个缓冲区来读取每个字符串,然后使用strdup()它将复制字符串并将其分配到它在 carnames 中的位置。

Here's an example:

char buffer[80];
char * carnames[MAX_INPUT];

for(i=0;i<carNum;i++)
{
  scanf("%s", buffer);
  carnames[i] = strdup(buffer);
}

Be aware that strdup allocates memory for the string, so once you're done you should free the memory.

于 2013-03-30T18:24:19.510 回答