Báo lỗi chạy chương trình trên VS

mọi người giải thích giùm với tại sao mình không thể sử dụng các hàm về chuỗi ký tự: strlen, strcpy, strcat,…
Mình đã sử dụng các thư viện

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

mà chương trình vẫn báo lỗi
fflush(stdin) thì không xóa được bộ đệm
cài đặt visual studio có vấn đề gì chăng, đem đoạn cốt sang máy khác thì chạy bình thường
mọi người chỉ mình cách khắc phục với

Tốt nhất đừng dùng VS :slight_smile: đó không phải là bug đâu. Vả lại bạn muốn viết C *nhìn thư viện* thì nên tìm IDE nào hỗ trợ ấy.

1 Like

C++ à?
đã C++ sao còn stdio.h ? bỏ đi, thay vào include <iostream> cho đúng chuẩn C++.
thêm nữa, include <string> thôi, bỏ .h đi.

1 Like

ko phai c++ , minh lam c ban oi

mình mới học nên dùng visual, trên lớp thực hành cũng trên visual

c với c++ đều như nhau về cơ bản mà!!!

Không thể là thế nào, lỗi gì, đăng hết lên đây mọi người mới giúp được!

Gửi mọi người: Visual Studio code C tốt nhé! Máy mình chạy ầm ầm!

2 Likes

C có cài sẵn CTDL không? :smiley: Có template không? Có auto không? Có exception không? Có move semantic không?

VS chỉ có C++, không có C. Thư viện có sẵn không có string.h

Sao không có được, mình xài mấy hàm đó bình thường, file là cpp hẳn hoi.

1 Like

#include “stdafx.h”
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct sinhvien
{
char hoten[50], masv[12];
float d1, d2;
float dtb;
}a[100];

int kiemtra(sinhvien a[], int k, char ma[])
{
int i;
for (i = 0; i<k; i++)
if (strcmp(a[i].masv, ma) == 0)
return 1;
return 0;
}
void nhap(sinhvien *a, int n)
{
int i;
for (i = 0; i<n; i++)
{
//fflush(stdin);
_flushall;
do
{
printf(“Nhap ma sinh vien:”);
gets_s(a[i].masv);
} while (kiemtra(a, i, a[i].masv));

	printf("Nhap ten sinh vien:");
	gets_s(a[i].hoten);
	printf("Nhap diem thi mon 1:");
	scanf_s("%f", &a[i].d1);
	printf("Nhap diem thi mon 2:");
	scanf_s("%f", &a[i].d2);

	a[i].dtb = (float)(a[i].d1 + a[i].d2) / 2;
}

}

void hoandoi(sinhvien a[], sinhvien *x1, sinhvien *x2)
{
sinhvien t;
t = *x1;
*x1 = *x2;
*x2 = t;
}
void sapxep(sinhvien a[], int n)
{
int i, j;
for (i = 0; i<n - 1; i++)
{
for (j = i + 1; j<n; j++)
if (a[i].dtb < a[j].dtb)
hoandoi(a, &a[i], &a[j]);
}
}

void indanhsach(sinhvien a[], int n)
{
int vt = 1;
int i, k = 1;
for (int i = 0; i<n; i++)
{
printf("\n");
printf("%d\t", vt);
if (a[i].dtb == a[i + 1].dtb)
{
k++;
}
else
{
vt = vt + k;
k = 1;
}
printf("%s\t", a[i].masv);
printf("%s\t", a[i].hoten);
printf("%0.1f\t", a[i].d1);
printf("%0.1f\t", a[i].d2);
printf("%0.1f\t", a[i].dtb);
}
}

int main()
{
sinhvien a[100];
int n;

printf("Nhap n=");
scanf_s("%d", &n);

nhap(a, n);
sapxep(a, n);

printf("\n");
printf("VT\t");
printf("MASV\t");
printf("TENSV\t");
printf("DM1\t");
printf("DM2\t");
printf("DTB\t");
indanhsach(a, n);

}
đoạn code này mình cop trên google cũng không chạy nhé

mình xem lại rồi bạn, có dùng được các hàm nhưng ffllush(stdin) vẫn ko chạy

mấy cái này mình không hiểu, mình mới học thôi bạn

Trong platforn toolset v14, Microsoft đã thay đổi chút ít cho nên flush(stdin) ko có tác dụng nữa (tốt hay dở thì tùy, cần xem lại).
Giải pháp khác là đây: https://youtu.be/ThRCjUk4nto
Hoặc: https://www.geeksforgeeks.org/clearing-the-input-buffer-in-cc/

bạn ơi lại nảy sinh một vấn đề nữa, mình cop nguyên cái đoạn code như trên https://youtu.be/ThRCjUk4nto

#include <stdio.h>
#include “stdafx.h”
#include <conio.h>
int main()
{
int num;
char ch;
printf("\nEnter a number: “);
scanf_s(”%i", &num);
printf("\nEnter a character: “);
while (getchar() != ‘n’);
scanf_s(”%c", &ch);
printf("\nGDh");
_getch();
return 0;
}
và kết quả là sau dòng lệnh while (getchar() != ‘n’); chương trình không chạy nữa

Bạn vào link thứ 2 rồi thử các cách khác cho C hoặc C++

Cuối chuỗi © có ‘\0’ chưa, và tập sử dụng string của C++ thay vì của C đi vì string C++ linh hoạt hơn

Bấm sai lệnh:

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

Sửa:

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

Cái này cũng không tùy tiện được, lúc không cần mà dùng thì sẽ bị lặp vô hạn.

Bấm chuỗi C có dấu ngoặc thì mặc định có ‘\0’ rồi.

Câu đó là đang trả lời cho Aragami.

Người ta đang học C.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?