01/10/2018, 00:34

Help chương trình cơ bản

các bác tư vấn em với lỗi ở đâu

#include<stdio.h>
#include<conio.h>
main(){
char ho_va_ten;
printf("nhap ho va ten: 
");
scanf("%c,&ho_va_ten");
int nam_sinh;
printf("nhap nam sinh: 
");
scanf("%f,&nam_sinh");
printf("ho va ten, nam sinh la:%c ho_va_ten,%f nam_sinh");
}

khi chạy thì nhập tên vào nó báo :
aproblem caused the program to stop working correctly windows will close program and notify you if a solution is available
chương trình vẫn chạy nhưng lại lỗi

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

Code của bạn, mình edit lại:

#include <stdio.h>

int main() {
	char ho_va_ten[50];
	int nam_sinh;
	printf("Nhap ho va ten:\n");
	gets(ho_va_ten);
	printf("Nhap nam sinh:\n");
	scanf("%d", &nam_sinh);
	printf("Ho va ten, nam sinh la: %s, %d", ho_va_ten, nam_sinh);
	return 0;
}

Mình có góp ý như sau:

  • Hàm main bạn nên để void hoặc int. Nếu để int thì return 0; để báo cho hệ điều hành biết chương trình chạy thành công.
  • Biến ho_va_ten phải là kiểu chuỗi, vì kiểu char chỉ cho phép 1 kí tự, chỗ đó phải là: char[50] (ở đây tùy bạn, cho độ dài tối đa là bao nhiêu).
  • scanf thì phải để biến ngoài dấu ngoặc kép. Specifier (ví dụ %c, %d) phải để trong dấu ngoặc kép.
  • Năm sinh thì chỉ có số nguyên thôi, chỗ scanf phải là %d, còn họ tên thì không nên dùng scanf vì sẽ còn tồn tại buffer nên bạn không thể nhập năm sinh được. Nên dùng hàm gets, sẽ lấy hết kí tự, còn dùng scanf thì chỉ lấy được tới khoảng trắng đầu tiên.
allan hawco viết 02:49 ngày 01/10/2018

bác cho em hỏi tại sao khi mình viết gets(ho_va_ten) mình không cần gán địa chỉ chi nó? tên biến là tên địa chỉ luôn hả? còn cái printf cuối ở trên mình khai báo là kiểu char mà ở dưới là %s ạ, sao khôn phải %c ?

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

Bạn tra hàm gets trên thư viện sẽ thấy hàm gets có tham số là char str*, tức là nó truyền vào String, mà string thì không cần gán địa chỉ. Dưới đây là câu mình trích trong thư viện.

Get string from stdin
Reads characters from the standard input (stdin) and stores them as a C string into str until a newline character or the end-of-file is reached.

Còn tại sao phải là %s, vì %s dành cho String, còn %c thì cho kí tự. Cho dễ nhớ thì chữ s là String, chữ c là Char
Chúc bạn học tốt!

Bài liên quan
0