C Чтение ввода в массив символов в цикле
Я читаю информацию от 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;
}
2 ответа
Изменить новый ответ:
Как вы показали, вы требуете, чтобы вы читали некоторое количество названий и типов автомобилей. Вам нужен массив строк для 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
Я даю char*
как аргумент в scanf, а также в printf)
старый ответ: в первом цикле 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);
Объявляемые массивы не представляют строки, они представляют непрерывную память, состоящую из 50 байтов и 200 байтов. Этого достаточно, чтобы сохранить одну строку из 50 символов и строку из 200 символов соответственно. Вам нужен массив строк, объявленных так.
char * carnames[MAX_INPUT];
Я полагаю, вы создаете буфер для чтения каждой строки, а затем использовать strdup()
который скопирует и распределит строку по ее месту в именах машин.
Вот пример:
char buffer[80];
char * carnames[MAX_INPUT];
for(i=0;i<carNum;i++)
{
scanf("%s", buffer);
carnames[i] = strdup(buffer);
}
Помните, что strdup выделяет память для строки, поэтому, как только вы закончите, вы должны освободить память.