30/09/2018, 19:14

Có ai biết cái atoi trong ct này là gì không?

/* Danh sach nhan vien */
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 50
int main()
{
	struct nhanvien
	{
		int manv;
		char hoten[30];
	};
		nhanvien snv[MAX];
	char ctam[10];
	int i, in;
	printf("Nhap vao so nhan vien: ");
	gets(ctam);
	in = atoi(ctam);
//Nhap danh sach nhan vien
	for(i = 0; i < in; i++)
	{
		printf("Nhap vao ma nhan vien thu %d: ", i + 1);
		gets(ctam);
		snv[i].manv = atoi(ctam);
		printf("Nhap vao ho ten: ");
		gets(snv[i].hoten);
	}
//in danh sach nhan vien
	for(i = 0; i < in; i++)
		printf("%5d %s
", snv[i].manv, snv[i].hoten);
	getch();
}
Vu Van Chung viết 21:22 ngày 30/09/2018

atoi(char[]) là hàm chuyển đổi xâu kí tự về số kiểu ```intbạn nhé. Ví dụatoi(“123”)= 123//“123” là chuổi, mảng kí tự, 123 là số kiểu intCònatof` thì chuyển về số thực float

John Nguyen viết 21:15 ngày 30/09/2018

Bạn cho mình hỏi là sau lệnh printf(“Nhap vao so nhan vien: “); mình không dùng luôn là scanf(”%d”,&in);
mà lại phải dùng
gets(ctam);
in = atoi(ctam);
Mình đã thử đổi lại nhưng k chạy đúng.Mình k hiểu tại sao ?

Vu Van Chung viết 21:16 ngày 30/09/2018

Bạn cho mình xem cái hình? Mình chạy vẫn rất ok

viết 21:28 ngày 30/09/2018

do scanf("%d") nó ko đọc dấu enter nên “Nhập vào họ tên” sẽ đọc 1 dòng trống.

khi bạn nhập vào 1 số rồi enter thì input buffer nó thế này:
123\n (4 ký tự)
scanf("%d") sẽ đọc 3 ký tự số, input buffer còn
\n
tiếp theo xài gets() để lấy họ tên, mặc dù bạn chưa nhập vào họ tên nhưng nó đọc thấy input buffer có input nên nó sẽ đọc tới khi thấy ký tự \n thì dừng, nên hoten đọc vào sẽ trống không. Sau khi gets hoten thì input buffer trống.


còn cách đọc gets() rồi atoi thì ctam sẽ chứa chuỗi “123”, input buffer sau khi gets ctam sẽ trống. Dòng lệnh gets hoten tiếp theo sẽ bắt bạn phải nhập input mới vì input buffer lúc này trống không.


muốn đọc scanf("%d") thì phải có 1 dòng lệnh để clear input buffer sau khi scanf.

int ignore; //khai báo trước
//...
scanf("%d", ...);
while ((ignore = getchar()) != '\n' && ignore != EOF); //đọc tới khi eof hoặc thấy '\n' thì dừng
Bài liên quan
0