01/10/2018, 13:50

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

rogp10 viết 16:02 ngày 01/10/2018

Tốt nhất đừng dùng VS đó 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.

Quang Minh viết 16:03 ngày 01/10/2018

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.

Vn viết 16:05 ngày 01/10/2018

ko phai c++ , minh lam c ban oi

Vn viết 15:55 ngày 01/10/2018

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

Aragami1408 viết 15:59 ngày 01/10/2018

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

明玉 viết 15:56 ngày 01/10/2018

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!

rogp10 viết 16:02 ngày 01/10/2018

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

Trần Hoàn viết 15:59 ngày 01/10/2018

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

明玉 viết 15:57 ngày 01/10/2018

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

Vn viết 16:06 ngày 01/10/2018

#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é

Vn viết 15:55 ngày 01/10/2018

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

Vn viết 15:53 ngày 01/10/2018

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

明玉 viết 16:06 ngày 01/10/2018

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/

Vn viết 16:06 ngày 01/10/2018

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

明玉 viết 16:01 ngày 01/10/2018

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

Hứa Anh Minh viết 16:04 ngày 01/10/2018

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

明玉 viết 15:56 ngày 01/10/2018

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.

明玉 viết 15:51 ngày 01/10/2018

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

rogp10 viết 16:00 ngày 01/10/2018

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

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

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

Vn viết 15:58 ngày 01/10/2018

cảm ơn bạn nhiều

Bài liên quan
0