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
Bài liên quan
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.C++ à?
đã C++ sao còn
stdio.h
? bỏ đi, thay vàoinclude <iostream>
cho đúng chuẩn C++.thêm nữa,
include <string>
thôi, bỏ.h
đi.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!
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?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.
#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));
}
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;
}
đ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:
Sửa:
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.
cảm ơn bạn nhiều