我正在读取来自stdin的输入,例如汽车名称、汽车类型。
我面临的问题是,如果我输入number of cars 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;
}发布于 2013-03-31 02:19:20
编辑新答案:
正如您所展示的,您需要读取一定数量的汽车名称和类型,您需要carName和cartype的字符串数组,而不是简单的字符数组。例如(对于论文解决方案):
#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]);
} (注意:当我使用%s时,我在scanf和printf中都提供了char*作为参数)
老答案:在第一个循环中,你的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-31 02:24:20
您声明的数组不表示字符串,它表示由50字节和200字节组成的连续内存。这足以分别存储单个50个字符的字符串和200个字符的字符串。您需要的是一个字符串数组,声明如下。
char * carnames[MAX_INPUT];我建议你创建一个缓冲区来读取每个字符串,然后使用strdup(),它会将字符串复制并分配到它在carname中的位置。
下面是一个例子:
char buffer[80];
char * carnames[MAX_INPUT];
for(i=0;i<carNum;i++)
{
scanf("%s", buffer);
carnames[i] = strdup(buffer);
}请注意,strdup会为字符串分配内存,因此一旦完成分配,就应该释放内存。
https://stackoverflow.com/questions/15721831
复制相似问题