2015-02-10 2 views
1

Привет, Я пытаюсь создать программу счета, которая должна принимать имя, цену и количество предметов и хранить их в списке или массиве. Когда я запускаю программу, я получаю ошибки. Может кто-то помочь? Я нуб -с и не может видеть, как я не заладилось, понятие очень просто ..Array, содержащий строку

Вот программа:

#include <string.h> 
#include <conio.h> 

int main() 
    { 
    char item_name[255]; 
    float item_price=0; 
    float quantity; 
    int choice; 
    int k; 

    for (k=0;choice != 2;k++) 
    { 
     printf ("Enter item name: "); 
     scanf ("%s", item_name[k]); 
     printf ("\n"); 
     printf ("Enter item price: "); 
     scanf ("%f", &item_price[k]); 
     printf ("\n"); 
     printf ("Enter item quantity: "); 
     scanf ("%f", &quantity[k]); 
     printf ("\n\n"); 
     printf ("Enter another item? Enter '1' for yes and '2' for no: "); 
     scanf ("%d", &choice); 
    } 

    } 

эти ошибки:

sample.c: В функции «main»: sample.c: 15: 8: warning: format '% s' ожидает аргумент типа 'char *', но аргумент 2 имеет тип 'int' [-Wformat =] scanf ("% s ", item_name [k]); ^^ sample.c: 18: 32: ошибка: индексированное значение не является ни массивом, ни указателем, ни вектором scanf ("% f", & item_price [k]); ^^ sample.c: 21: 30: ошибка: индексированное значение не является ни массивом, ни указателем, ни вектором scanf ("% f", & количество [k]); ^^ sample.c: 25: 5: error: expected ';' before '}' token } ^ sample.c: 8: 10: warning: переменная 'количество' установлена, но не используется [-Wunused-but -set-variable] количество поплавка; ^ sample.c: 7: 10: warning: переменная 'item_price' установлена, но не используется [-Wunused-but-set-variable] float item_price = 0; ^

+3

Пожалуйста, добавьте полные ошибки, которые вы получаете на вопрос пост (не как комментарии). – Celeo

+0

...хорошо - довольно очевидно, что мы выделяем пространство для _one_ item name, price и quantity, а затем пытаемся сохранить несколько из них (в памяти, которая не существует). –

+0

'количество' и' item_price' не являются массивами, поэтому вы не можете использовать [] на них. –

ответ

1
char item_name[255]; 

- это единственная строка - не массив строк.

item_name[k] 

является символ - не символ *

Так что вам нужно сделать item_name 2D-массив строк

char item_name[100][255]; 

, а затем использовать

scanf ("%s", item_name[k]); 

Следующая проблема item_price. Он также должен быть массивом:

float item_price[100]; 

И та же история с количеством флоат

float quantity[100]; 

И тогда ваш отсутствующим «;» в конце прошлого зсапЕ

Наконец, вам нужно добавить

if (choice == 2) break; 

, чтобы выйти из цикла.

Предлагаемый код позволяет на 100 пунктов, так что вы все должны так добавить:

if (k > 99) break; 

в качестве первой линии в для цикла

Смежные вопросы