30/09/2018, 17:30

Lỗi 'for' loop initial declarations are only allowed in C99 or C11 mode

Bạn nào xem thử bài tớ làm sao lỗi chả hiểu!!!

Viết
chương trình định nghĩa các hàm để thực hiện các công việc sau:

a) Nhập
mã sinh viên, họ và tên, điểm của không quá 50 sinh viên vào tập tin input.txt

b)
Tìm các sinh viên có điểm thấp nhất và cao nhất và tính điểm trung bình của các
sinh viên

c)
Tìm họ tên của sinh viên có mã được nhập từ bàn phím

d)
Tìm tất cả sinh viên (gồm mã sinh viên, , họ, tên và điểm) có tên giống với tên
được nhập từ bàn phím

e)
Ghi tất cả kết quả thực hiện được vào tập tin output.txt

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

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

// Dinh nghia cau truc luu tru thong tin sinh vien.
struct SinhVien
{
   char Ma[8];
   char Ten[31];
   char Lop[7];
   float Diem;
};
 
// Khai bao mang de luu tru danh sach sinh vien.
struct SinhVien sv[50];
int n = 0; // Bien luu tru so sinh vien hien tai.
 
// Ham thuc hien in Menu.
int HienThiMenu()
{
    clrscr();
   printf("CAC CHUC NANG CHINH CUA CHUONG TRINH
");
   printf("1. Nhap danh sach thong tin sinh vien
");
   printf("2. In danh sach thong tin sinh vien
");
   printf("3. Tim kiem thong tin sinh vien
");
   printf("4. In danh sach sinh vien thi do
");
   printf("5. Thoat khoi chuong trinh
");
   printf("Ban chon: ");
   int chon;
   scanf("%d",&chon);
   return chon;
}
 
// Ham nhap danh sach sinh vien.
void NhapDanhSachSinhVien()
{
    printf("
----------------------
");
   printf("NHAP DANH SACH SINH VIEN
");
   printf("=====================
");
 
   // Nhap danh sach sinh vien.
   do
   {
      printf("Nguoi thu %d:
",n+1);
      printf("	Ma: ");
      fflush(stdin);
      gets(sv[n].Ma);
      // Neu Ma la khoang trang thi dung ko nhap tiep.
      // Ma la khoang trang neu do dai cua Ma la 0.
      if (strlen(sv[n].Ma)==0)
      {
        break;
      }
      printf("	Ten: ");
      fflush(stdin);
      gets(sv[n].Ten);
      printf("	Lop: ");
      fflush(stdin);
      gets(sv[n].Lop);
      printf("	Diem: ");
      scanf("%f",&sv[n].Diem);
      n++;
   }
   while (1==1);
}
 
// Ham in danh sach sinh vien.
void InDanhSachSinhVien()
{
    printf("
-----------------
");
   printf("DANH SACH SINH VIEN
");
   printf("-------------------
");
 
   printf("%-14s %-25s %-8s  Diem
","Ma sinh vien", "Ten sinh vien", "Lop");
   for (int i=0; i<n; i++)
   {
        printf("%-14s %-25s %-8s  %.1f
",sv[i].Ma, sv[i].Ten, sv[i].Lop, sv[i].Diem);
   }
 
   printf("
Bam ENTER de tiep tuc");
   getch();
}
 
// Ham tim kiem.
void TimKiem()
{
    printf("
----------------
");
   printf("TIM KIEM THONG TIN
");
   printf("------------------
");
   printf("Kieu tim kiem (0 - Tim kiem theo ma, 1 - Tim kiem theo ten
");
   printf("Ban chon: ");
   int chon;
   scanf("%d",&chon);
 
   if (chon==0)
   {
    char Ma[7];
      printf("Ma: ");
      fflush(stdin);
      gets(Ma);
 
      struct SinhVien svTimThay;
      int timThay = 0;
      for (int i=0; i<n; i++)
      {
        // Neu Ma nhap trung voi ma cua sinh vien thu i
         // -> Tim thay.
         if (strcmp(Ma,sv[i].Ma)==0)
            {
                svTimThay = sv[i];
            timThay = 1;
            break;
         }
      }
 
      printf("Ket qua tim kiem:
");
      if (timThay==0)
      {
        printf("Khong tim thay sinh vien nao co ma la [%s]
",Ma);
      }
      else
      {
            printf("%-14s %-25s %-8s  Diem
","Ma sinh vien", "Ten sinh vien", "Lop");
            printf("%-14s %-25s %-8s  %.1f
",svTimThay.Ma, svTimThay.Ten, svTimThay.Lop, svTimThay.Diem);
      }
   }
   else
   {
    char Ten[31];
    printf("Ten: ");
      fflush(stdin);
      gets(Ten);
 
      int timThay = 0;
      printf("Ket qua tim kiem:
");
      printf("%-14s %-25s %-8s  Diem
","Ma sinh vien", "Ten sinh vien", "Lop");
      for (int i=0; i<n; i++)
      {
        // Neu Ten nhap trung voi Ten cua sinh vien thu i
         // -> Tim thay.
         if (strcmp(Ten,sv[i].Ten)==0)
            {
            timThay = 1;
            printf("%-14s %-25s %-8s  %.1f
",sv[i].Ma, sv[i].Ten, sv[i].Lop, sv[i].Diem);
         }
      }
 
      if (timThay==0)
      {
        printf("Khong tim thay sinh vien nao co ten la [%s]
",Ten);
      }
   }
 
   printf("
Bam ENTER de tiep tuc");
   getch();
}
 
// Ham in danh sach sinh vien thi do.
void InDanhSachSinhVienThiDo()
{
    printf("
------------------------
");
   printf("DANH SACH SINH VIEN THI DO
");
   printf("--------------------------
");
 
   printf("%-14s %-25s %-8s  Diem
","Ma sinh vien", "Ten sinh vien", "Lop");
   for (int i=0; i<n; i++)
   {
    if (sv[i].Diem>=10)
      {
            printf("%-14s %-25s %-8s  %.1f
",sv[i].Ma, sv[i].Ten, sv[i].Lop, sv[i].Diem);
      }
   }
 
   printf("
Bam ENTER de tiep tuc");
   getch();
}

void main()
{
    int chon;
   do
   {
    chon = HienThiMenu();
    switch (chon)
    {
        case 1:
            NhapDanhSachSinhVien();
            break;
        case 2:
            InDanhSachSinhVien();
            break;
        case 3:
            TimKiem();
            break;
        case 4:
            InDanhSachSinhVienThiDo();
            break;
      }
    }
   while (chon!=5);
}

Lỗi

In function 'InDanhSachSinhVien':
78    4     [Error] 'for' loop initial declarations are only allowed in C99 or C11 mode
78    4      [Note] use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code   In function 'TimKiem':
107    7     [Error] 'for' loop initial declarations are only allowed in C99 or C11 mode
140    7     [Error] 'for' loop initial declarations are only allowed in C99 or C11 mode
 In function 'InDanhSachSinhVienThiDo':
169    4      [Error] 'for' loop initial declarations are only allowed in C99 or C11 mode
Khải Quách viết 19:31 ngày 30/09/2018

Chào bạn, bạn nên bắt đầu với việc post lên thông tin lỗi: message báo lỗi lúc build, dòng code nào bị lỗi (nếu là lỗi build), mô tả lỗi lúc chạy (nếu là lỗi runtime: vd như chạy mong muốn nó ra x mà nó ra y chẳng hạn). Thân!

*grab popcorn* viết 19:43 ngày 30/09/2018
for(int i...)

C99 mới làm đc điều này, khai báo trong vòng lặp
C11 đã bỏ rồi.
Nên bạn nên khai báo biến i ở ngoài.

Mai Anh Dũng viết 19:34 ngày 30/09/2018

@thinh94pc Đang dùng chương trình gì để compile? Nếu là Code::Blocks thì thêm -std=c99 vào cho compiler nó biết phải dùng chuẩn C99. Tham khảo câu trả lời của @drgnz

Hướng dẫn cách thêm -std=c99 trong Code::Blocks

Vào Settings chọn Compiler

Chọn Other options rồi thêm -std=c99 vào như hình

Thinh Cai viết 19:43 ngày 30/09/2018

em dùng DEV C 5.11 nhưng em không thấy

Mai Anh Dũng viết 19:44 ngày 30/09/2018

Dev C anh không dùng, nhưng anh Google thì có cái hình này

Thinh Cai viết 19:47 ngày 30/09/2018

Anh cho em hỏi tí làm sao để mà tìm GTLN va GTNN ở câu b trên khi nhập với nhiều thông tin theo hàm for thế.

Mai Anh Dũng viết 19:30 ngày 30/09/2018

Em tạo topic khác nhé Mỗi topic nên hỏi về một thứ thôi.

Minh Tan Phan viết 19:40 ngày 30/09/2018

bạn oi mình gặp 1 bài tập y chan bạn luôn… Mình là Dân Xây dựng . học C lần đầu đang ko biết phải làm nhu thế nào . bạn có thể chỉ mình câu a,b của bài được không ,
viết đoạn code trên DEV ra mình tham khảo với dc ko ban, GIúp mình với

Bài liên quan
0