0

Как добавить if-else Заявление для "kodeprodi"?Как добавить инструкцию if-else?

Каждый раз, когда я добавляю заявление if-else, всегда появляется сообщение «Lvalue required».

#include <iostream> 
#include <stdio.h> 
#include <conio.h> 
#include <stdlib.h> 

typedef struct { 
    char bp[13]; 
    char nama[15]; 
    int kodeprodi; 
    char namaprodi[10]; 
    float ipk; 
} mahasiswa; 

int main() 
{ 
    char pil; 

    do { 
     mahasiswa mhs[10]; 
     int i, n; 

     { 
      printf("Data Nilai Mahasiswa\n"); 
      printf("Berapa banyak data = "); 
      scanf("%d", &n); 

      for(i = 0; i < n; i++) { 
       printf("Data mahasiswa ke-%d\n", i+1); 
       printf("Nomor BP: "); scanf("%s", &mhs[i].bp); 
       printf("Nama: ");  scanf("%s", &mhs[i].nama); 
       printf("Kode Prodi: "); scanf("%d", &mhs[i].kodeprodi); 
       printf("IPK: ");  scanf("%f", &mhs[i].ipk); 

       if  (mhs[i].kodeprodi == 260) {mhs[i].namaprodi = "SI";} 
       else if (mhs[i].kodeprodi == 261) {mhs[i].namaprodi = "TI";} 
      } 

      //output 
      printf("No.  BP  Nama  Kode Prodi     Nama Prodi  IPK \n"); 

      for(i = 0; i < n; i++) { 
       printf("\n%2d %-10s %-9s %3d %3s %3.f\n", 
         i+1, mhs[i].bp, mhs[i].nama, mhs[i].nama, 
         mhs[i].kodeprodi, mhs[i].namaprodi, mhs[i].ipk); 
      } 
     } 

     printf("Repeat again? Y/N"); 
     scanf("%s", &pil); 
     printf("\n\n"); 

    } while ((pil == 'Y') || (pil == 'y')); 
} 

Даже если в операторе if-то еще, я типа как этот

if(mhs[i].kodeprodi==260){namaprodi = "SI"); 

сообщение об ошибке «Не определено символ 'namaprodi'

+0

_'mhs [i] .namaprodi = "TI"; '_ Вы не можете назначить массивы символов таким образом. Используйте переменные 'stdcpy()' или даже лучше 'std :: string' alltogether. –

+0

Изменить 'else if (mhs. [I] .kodeprodi == 261)' to 'else if (mhs [i] .kodeprodi == 261)' – Rabbid76

+1

Другая проблема заключается в том, что 'kodeprodi' является' char' и вряд ли иметь возможность удерживать значение 261. –

ответ

0

Для быстрого исправления, используйте:

if(mhs[i].kodeprodi==260){strncpy(mhs[i].namaprodi, "SI", 9); 

strncpy() необходимо скопировать содержимое в namaprodi.

namaprodi является членом структуры mahasiswa, поэтому вы не можете получить к ней доступ напрямую.

Но лучше использовать std::string вместо этого.

Кроме того, как указано в @BoPersson, char kodeprodi; не может содержать 260, поэтому лучше преобразовать его в int.

0

Я немного изменил ваш код. Избавьтесь от неиспользуемого conio.h, измените тип kodeprodi на int (потому что char может обрабатывать только числа -127..127), удалил & из некоторых вызовов scanf (потому что вы должны передать указатель на первый символ для форматирования% s), удалить лишние mhs [i] .nama аргумент для printf.

Извините, я полностью не понял ваш код :-) Мои настройки были полуавтоматическими! Вы должны лучше изучить программирование на C.

#include <iostream> 
#include <stdio.h> 
#include <stdlib.h> 

typedef struct { 
    char bp[13]; 
    char nama[15]; 
    int kodeprodi; 
    char namaprodi[10]; 
    float ipk; 
} mahasiswa; 

int main() { 
    char pil; 

    do { 
     mahasiswa mhs[10]; 
     int i, n; 

     { 
      printf("Data Nilai Mahasiswa\n"); 
      printf("Berapa banyak data = "); 
      scanf("%d", &n); 

      for(i=0;i<n;i++) { 
      printf("Data mahasiswa ke-%d\n", i+1); 
      printf("Nomor BP: "); scanf("%s", mhs[i].bp); 
      printf("Nama: "); scanf("%s", mhs[i].nama); 
      printf("Kode Prodi: "); scanf("%d", &mhs[i].kodeprodi); 
      printf("IPK: "); scanf("%f", &mhs[i].ipk); 

      if(mhs[i].kodeprodi==260) 
       strcpy(mhs[i].namaprodi, "SI"); 
      else if(mhs[i].kodeprodi==261) 
       strcpy(mhs[i].namaprodi, "TI"); 
     } 

     //output 
     printf("No.  BP  Nama  Kode Prodi     Nama Prodi  IPK \n"); 

     for(i=0;i<n;i++) { 
      printf("\n%2d %-10s %-9s %3d %3s %3.f\n", i+1, mhs[i].bp, mhs[i].nama, mhs[i].kodeprodi, mhs[i].namaprodi, mhs[i].ipk); 
     } 

     } 

     printf("Repeat again? Y/N"); 
     scanf("%s", &pil); 
     printf("\n\n"); 

    } while ((pil == 'Y') || (pil == 'y')); 

    return 0; 
} 
+0

За исключением того, что OP пишет C++, якобы. Поэтому OP должен изучать C++, а не C. –