首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C将输入读入循环中的char数组

C将输入读入循环中的char数组
EN

Stack Overflow用户
提问于 2013-03-31 02:16:51
回答 2查看 38.3K关注 0票数 0

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

我面临的问题是,如果我输入number of cars 2并在循环中输入,则第二个值将通过scanf覆盖为第一个值。

输入汽车数量:2

输入列名:chevy

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

输入列名:chevy2

可用的汽车类型可以是电动的,进气类型的汽车:电动

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

代码语言:javascript
复制
 #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;
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-31 02:19:20

编辑新答案:

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

代码语言:javascript
复制
 #define LEN 100     // declare sufficient length size 

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

正确的scanf和printf语句应该如下所示:

代码语言:javascript
复制
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]);
}    

(注意:当我使用%s时,我在scanf和printf中都提供了char*作为参数)

老答案:在第一个循环中,你的scanf语句是错误的:

代码语言:javascript
复制
     scanf("%s", &carName[i]);
                          ^  remove [i]
     scanf("%s", &carType[i]);
                          ^  remove [i]

你只需要像这样写:

代码语言:javascript
复制
    // printf
    scanf("%s", &carName);
    //print                    
    scanf("%s", &carType);

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

代码语言:javascript
复制
printf("\n%c", &carType[i]);
               ^  not need

正确的是

代码语言:javascript
复制
printf("\n%c", carType[i]);   

另外,我认为你的要求是:

代码语言:javascript
复制
printf("\n%s", carType);
票数 2
EN

Stack Overflow用户

发布于 2013-03-31 02:24:20

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

代码语言:javascript
复制
char * carnames[MAX_INPUT];

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

下面是一个例子:

代码语言:javascript
复制
char buffer[80];
char * carnames[MAX_INPUT];

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

请注意,strdup会为字符串分配内存,因此一旦完成分配,就应该释放内存。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15721831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档