Çözüldü Yazılan kod çalışmıyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

cedogukan

Yoctopat
Katılım
30 Nisan 2023
Mesajlar
7
Daha fazla  
Cinsiyet
Erkek
Herkese merhaba. C dilinde yazdığım kod çalışmıyor ve hatamı bulamadım. Harf girip, sayıyı giriyorum fakat ismi girin kısmında isim girince devam etmiyor. Bilginiz olması amacıyla beklenen çıktıyı da ekledim görsellere. Burayı ilk defa kullandığımdan hangisi daha iyi bilemediğimden kodu ss olarakta ekliyorum metin olarakta. Yardımcı olabilirseniz çok sevinirim.

C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_PARTS 100
#define CRT_SECURE_NO_WARNING

struct part {
int number;
char name[20];
float price;
int quantity;
};

int num_parts = 0;
struct part inventory[MAX_PARTS];

int find_part(int number);
void insert(void);
void search(void);
void update(void);
void print(void);
int compare_parts(const void* p, const void* q);

int main(void)
{
char code;

for ( ;; ) {

printf("Enter operation code: ");
scanf_s(" %c", &code);

while (getchar() != '\n');

switch (code) {
case 'i': insert();
break;
case 's': search();
break;
case 'u': update();
break;
case 'p': print();
break;
case 'q': return 0;
default: printf("Illegal code\n");
}
printf("\n");
}
}

int find_part(int number)
{
int i;

for (i = 0; i < num_parts; i++)
if (inventory.number == number)
return i;
return -1;
}

void insert(void)
{
int part_number;

if (num_parts == MAX_PARTS) {
printf("Database is full; can't add more parts.\n");
return;
}

printf("Enter part number: ");
scanf_s("%d", &part_number);

if (find_part(part_number) >= 0) {
printf("Part already exists.\n");
return;
}

inventory[num_parts].number = part_number;

printf("Enter part name: ");
scanf_s("%s", &inventory[num_parts].name);
printf("Enter price: ");
scanf_s("%f", &inventory[num_parts].price);
printf("Enter quantity on hand: ");
scanf_s("%d", &inventory[num_parts].quantity);
num_parts++;
}

void search(void)
{
int i, number;

printf("Enter part number: ");
scanf_s("%d", &number);
i = find_part(number);
if (i >= 0) {
printf("Part name: %s\n", inventory.name);
printf("Price: %.2f $\n", inventory.price);
printf("Quantity on hand: %d\n", inventory.quantity);
}
else
printf("Part not found.\n");
}

void update(void)
{
int i, number, change;

printf("Enter part number: ");
scanf_s("%d", &number);
i = find_part(number);
if (i >= 0) {
printf("Enter change in quantity on hand: ");
scanf_s("%d", &change);
inventory.quantity += change;
}
else
printf("Part not found.\n");
}

void print(void)
{
int i;

qsort(inventory, num_parts, sizeof(struct part), compare_parts);

printf("Part Number\tPart Name\tPrice\t\tQuantity on Hand\n");

for (i = 0; i < num_parts; i++)
printf("%d\t\t%s%.2f $\t\t%d\n", inventory.number, inventory.name, inventory.price, inventory.quantity);
}

int compare_parts(const void *p, const void *q)
{
const struct part *p1 = p;
const struct part *p2 = q;
}
 

Dosya Ekleri

  • Ekran görüntüsü 2023-04-30 153520.png
    Ekran görüntüsü 2023-04-30 153520.png
    122,4 KB · Görüntüleme: 188
  • Ekran görüntüsü 2023-04-30 153535.png
    Ekran görüntüsü 2023-04-30 153535.png
    152,2 KB · Görüntüleme: 170
  • Ekran görüntüsü 2023-04-30 153550.png
    Ekran görüntüsü 2023-04-30 153550.png
    153 KB · Görüntüleme: 169
  • Ekran görüntüsü 2023-04-30 154654.png
    Ekran görüntüsü 2023-04-30 154654.png
    162,5 KB · Görüntüleme: 183
Son düzenleme:
Çözüm
Şimdilik şöyle yaptım. Sandığımdan uzunmuş. Verdiğiniz şey asıl ödev için çok bir şey ifade etmiyor. Print uzunluğu için macro (#define zımbırtıları) ayarlarsınız. VS Code'da yazdığım için tab yok, yoktur. scanf falan değiştirdim, onlara bakarsınız.

Ödevin teslim tarihini söyleyin. Bu şekilde bırakabilirim veya başka zaman ödevde istendiği gibi linkedlist vb. kullanarak yaparım.

Anlamadığınız yerleri sorun. Bir kere olabildiğince ayrıntılı anlatırım. Dahası için başkasını beklersiniz. O tip bir durumda (kodun anlamı başlıklı) yeni konu açardım ben olsam.

Kod:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_PARTS 100
#define CRT_SECURE_NO_WARNING

typedef struct Part {
    int partNumber;
    int quantity;
    float price;
    char name[20];
} Part;

int partsCount = 0;
Part inventory[MAX_PARTS];

int findPart(int number) {
    for (int i = 0; i < partsCount; ++i) {
        if (inventory[i].partNumber == number) {
            return i;
        }
    }
   
    return -1;
}

void insert() {
    int partNumber = 0;
   
    if (partsCount == MAX_PARTS) {
        printf("Database is full; can't add more parts.\n");
        return;
    }

    printf("Enter part number: ");
    scanf("%d", &partNumber);
   
    if (findPart(partNumber) >= 0) {
        printf("Part already exists.\n");
        return;
    }
   
    inventory[partsCount].partNumber = partNumber;
    printf("Enter part name: ");
    scanf("%s", inventory[partsCount].name);
    printf("Enter price: ");
    scanf("%f", &inventory[partsCount].price);
    printf("Enter quantity on hand: ");
    scanf("%d", &inventory[partsCount].quantity);

    ++partsCount;
}

void search() {
    int partNumber = 0;
   
    printf("Enter part number: ");
    scanf("%d", &partNumber);
    int index = findPart(partNumber);
   
    if (index >= 0) {
        printf("Part name: %s\n", inventory[index].name);
        printf("Price: $%.2f\n", inventory[index].price);
        printf("Quantity on hand: %d\n", inventory[index].quantity);
    }
    else {
        printf("Part not found.\n");
    }
}

void update() {
    int partNumber = 0;
    int change = 0;
   
    printf("Enter part number: ");
    scanf("%d", &partNumber);
    int index = findPart(partNumber);
   
    if (index >= 0) {
        printf("Enter change in quantity on hand: ");
        scanf("%d", &change);
        inventory[index].quantity += change;
    }
    else {
        printf("Part not found.\n");
    }
}

int compareParts(const void *a, const void *b) {
    if (((Part*)a)->partNumber < ((Part*)b)->partNumber) return -1;
    if (((Part*)a)->partNumber > ((Part*)b)->partNumber) return 1;
    return 0;

    // return (((Part*)a)->partNumber > ((Part*)b)->partNumber) - (((Part*)a)->partNumber < ((Part*)b)->partNumber);
}

void printTitle() {
    printf("%-*s", 13, "Part Number"); // 15?
    printf("%-*s", 20, "Part Name");
    printf("%-*s", 12, "Price");
    printf("%-*s", 17, "Quantity on Hand");
    printf("\n");
}

void printPart(Part* part) {
    printf("%-*d", 13, part->partNumber);
    printf("%-*s", 20, part->name);
    printf("$%-*.2f", 12 - 1, part->price);
    printf("%-*d", 17, part->quantity);
    printf("\n");
}

void printParts() {
    qsort(inventory, partsCount, sizeof(Part), compareParts);
    printTitle();
   
    for (int i = 0; i < partsCount; ++i) {
        printPart(inventory + i);
    }
}



int main() {
    char code = 0;
   
    while (1) {
        printf("Enter operation code: ");
        scanf(" %c", &code);
       
        while (getchar() != '\n');
       
        switch (code) {
            case 'i': insert(); break;
            case 's': search(); break;
            case 'u': update(); break;
            case 'p': printParts();  break;
            case 'q': return 0;
            default: printf("Illegal code\n");
        }
       
        printf("\n");
    }

    return 0;
}
ChatGPT'yi denemiştim fakat tam olarak çözemiyor ya da ben anlayamıyorum. Sizin Yazdığınızı da denedim fakat düzelmedi. İlginiz için teşekkür ederim :)
 
Fena ödev değil. Başarın da takdiye şayan. Bir yerlerden arakladım desen çok mantıklı olur.
Müsait olunca bakarım. Buna çok güzel çıktı ayarlanır, seninki hiç güzel değil.

Kıyaslama neye göre yapılacak? Örnek çıktı var ama ödevde istenen şey yok. Kodu zaten paylaşmışsınız, tekrar görsel olarak paylaşmanız bir şey katmıyor.

Visual Studio'da C geliştirmezdim ben. Hocan hangi ortamda geliştirme yapıyorsa sen de orada yap. scanf_s her yerde çalışmaz.
 
Fena ödev değil. Başarın da takdiye şayan. Bir yerlerden arakladım desen çok mantıklı olur.
Müsait olunca bakarım. Buna çok güzel çıktı ayarlanır, seninki hiç güzel değil.

Visual Studio'da C geliştirmezdim ben. Hocan hangi ortamda geliştirme yapıyorsa sen de orada yap. scanf_s her yerde çalışmaz.
ChatGPT'den yardım alarak yaptım fakat %70-80'ini ben yazdım. Hocam da Visual Studio'dan yapıyor malesef :( Amacım iyi not almaktan çok mantığını öğrenmek. Bazı şeyleri kafamda tam oturtamamışım ki yapamıyorum. Müsait olunca yardımcı olursanız çok sevinirim.
 
Fena ödev değil. Başarın da takdiye şayan. Bir yerlerden arakladım desen çok mantıklı olur.
Müsait olunca bakarım. Buna çok güzel çıktı ayarlanır, seninki hiç güzel değil.

Kıyaslama neye göre yapılacak? Örnek çıktı var ama ödevde istenen şey yok. Kodu zaten paylaşmışsınız, tekrar görsel olarak paylaşmanız bir şey katmıyor.

Visual Studio'da C geliştirmezdim ben. Hocan hangi ortamda geliştirme yapıyorsa sen de orada yap. scanf_s her yerde çalışmaz.
Ödevin tamamı burada. Düzenleme yapıp sormuşsunuz yeni fark ediyorum. Yeniyim yavaş yavaş keşfediyorum haklısınız :)
 

Dosya Ekleri

  • Ekran görüntüsü 2023-04-30 164517.png
    Ekran görüntüsü 2023-04-30 164517.png
    552 KB · Görüntüleme: 143
  • Ekran görüntüsü 2023-04-30 164530.png
    Ekran görüntüsü 2023-04-30 164530.png
    241,3 KB · Görüntüleme: 146
  • Ekran görüntüsü 2023-04-30 163932.png
    Ekran görüntüsü 2023-04-30 163932.png
    188 KB · Görüntüleme: 145

Yeni konular

Geri
Yukarı