2016-12-25 4 views
-2

Я хочу сделать программу кассира языком C. я, используя структуру для записи, но проблема в том, когда я пытаюсь показать квитанцию ​​об оплате по определенному имени пункта detail[i].name и цен detail.[i].price для зацикливания, я получил это сообщениеневерное преобразование из 'char *' в 'char' [-fpermissive]

[Ошибка] Неправильное преобразование из «символа *» к 'полукокса' [-fpermissive]

это мой сценарий

#include<stdio.h> 
#include <stdlib.h> 
    struct item{ 
     char name[10]; 
     int price; 
     int barcode; 
    }; 
    struct item detail[10]={ 
     "item1",10,1, 
     "item2",20,2, 
     "item3",30,3, 
     "item4",40,4, 
     "item1",50,5, 
     "item2",60,6, 
     "item3",70,7, 
     "item4",80,8, 
     "item3",90,9, 
     "item4",100,10 
    }; 
    int main(){ 
     int ibarcode[10];int qty[10];char b[10];int price[10];int ju[10];int tot[10]; 
     int j,i,k,grand; 
     char a; 
     printf("Cashier program\n"); 
     for(j=0;j<10;j++){ 
      printf("enter barcode : ");scanf("%d",&ibarcode[j]); 
      for(i=0;i<10;i++){ 
       if(ibarcode[j]==detail[i].barcode){ 
        printf("item name: %s\n",detail[i].name); 
        printf("price : %d\n",detail[i].price); 
        printf("Quantity : ");scanf("%d",&qty[j]); 
        tot[j]=detail[j].price*qty[j]; 
       } 
       if(ibarcode[j] > 10){ 
        printf("Barcode not valid\n"); 
        j--; 
        break; 
       } 
      } 
      printf("\nDo you want to buy again? [Y/N] = ");scanf("%s", &a); 
      b[j] = detail[i].name; 
      ju[j] = detail[i].price; 
      if(a=='Y'||a=='y'){ 
       continue; 
      } else { 
       break; 
      } 
     } 
     grand = 0; system("cls"); 
    printf("\n name Kasir = Addzifi Moch G\n"); 
    printf(" Tanggal = 03 januari 2017\n"); 
    printf(" Jam  = 14:05 WIB\n\n"); 
    printf("+-------------------------------------------------------------------------------------------------+\n"); 
    printf("| Barcode | name item\t\t\t| price \t\t| Quantity\t| Total |\n"); 
    printf("+-------------------------------------------------------------------------------------------------+\n"); 
for(k=0; k<=j; k++){ 
    grand += tot[k]; 
    printf("| %d \t | %s\t    | %d\t\t  | %d\t\t\t| %d |\n", ibarcode[k], b[k], ju[k], qty[k], tot[k]); 
} 
printf("+-------------------------------------------------------------------------------------------------+\n"); 
printf("|\t\t\t\t\t\t\t Total Yang Harus Dibayarkan = %d |\n", grand); 
printf("+-------------------------------------------------------------------------------------------------+\n"); 
} 
+0

'' char' и символ * '(указатель) разные вещи. Вероятно, вам нужно удалить ссылку на указатель где-нибудь, используя '&'. – byxor

+1

@BrandonIbbotson не будет использовать оператор амперсанда для вычисления типа 'char **', а не 'char'? – George

+0

Вы должны показать нам, в какой строке происходит ошибка. (Сообщение об ошибке содержит номер строки). В противном случае мы только догадываемся. – abelenky

ответ

4

Держу пари, что происходит на линии

b[j] = detail[i].name; 

и это потому, что b представляет собой массив символов, а name - это строка, поэтому вы хотите назначить b[j] символ, строку.

использование strcpy:

strcpy(b, detail[i].name); 
+0

есть ли способ, который не использует 'strcpy'? – daniel

+1

Да: объявить 'b' как массив указателей на символы, т. Е.' Char * b [10]; 'Теперь ваш' b [j] = detail [i] .name; 'будет действителен. –

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