01/10/2018, 13:41

Cách nhập dữ liệu từ bàn phím, cách nhau bởi dấu phẩy

mọi người giúp em với, chỉ em cách mà nhập tữ liệu vào cấu trúc struct hồm: int, char, double

trên 1 dòng, cách nhau bở đấu phẩy:

vd: int maSoSV; char hoVaTen[50]; double gpa;

nhập: 1111, hovaten a, 4.0

HK boy viết 15:43 ngày 01/10/2018
  • Đọc cả dòng
  • Viết hàm tách thành phần theo dấu phẩy.
*grab popcorn* viết 15:53 ngày 01/10/2018

Thử như sau:

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

int main(void) {
  int a;
  char ht[40];
  double d;
  scanf("%d,%[^,],%lf", &a, &ht, &d);
  printf("%d %s %lf", a, ht, d);
	return 0;
}
Tung Dao viết 15:49 ngày 01/10/2018

Làm như cách @noname00 cũng được, nhưng nếu em thix style “1 line for all” thì search với key word “scanf with dilimiter”

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

[code]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
{
int maSoSV;
char hoVaTen[50];
double gpa;

}student;

int main()
{
int n,i;
scanf("%d",&n);
student std = (student)malloc(n*sizeof(student));

char input[100];


for(i=0;i<n;i++)
{

	fflush(stdin);
    fgets(input,100,stdin);
    input[strlen(input)-1] = '\0';
	sscanf(input,"[^,]|%[^,]|%lf",std[i].maSoSV,std[i].hoVaTen,std[i].gpa);
}

for(i=0;i<n;i++)
{
	printf("%d - %s - %.1lf ",std[i].maSoSV,std[i].hoVaTen,std[i].gpa);
}

}[/code]

giuops em voiws, sai ở chỗ nòa vậy bác.

*grab popcorn* viết 15:57 ngày 01/10/2018

“[^,]|%[^,]|%lf”,std[i].maSoSV,std[i].hoVaTen,std[i].gpa);

Mẫu của bạn bị sai rồi

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

bác sữa giúp em được k, em làm theo cả trên stackover mà nó vẫn sai

*grab popcorn* viết 15:43 ngày 01/10/2018

Mình có ví dụ ở trên rồi mà
Ngoài ra phần nhập bạn chưa truyền con trỏ vào, nên nhập sẽ bị sai đấy.

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

bác ơi, nó lỗi này

prog.c: In function 'main': prog.c:25:9: error: format '%[^,' expects argument of type 'char *', but argument 3 has type 'char **' [-Werror=format=] scanf("%d,%[^,],%lf", &std[i].maSoSV, &std[i].hoVaTen, &std[i].gpa); ^ cc1: all warnings being treated as errors

giúp em với.

*grab popcorn* viết 15:50 ngày 01/10/2018

scanf("%d,%[^,],%lf", &std[i].maSoSV, &std[i].hoVaTen, &std[i].gpa);

Ho và tên ko cần truyền địa chỉ đâu
Ở trên mình code bừa khúc đó đấy.

Còn ẩu như mình thì tắt các flags -Werror -Wfatal-errors đi là tung tăng bay lượn.

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

em bieets cai đây mà đôi khi vẫn mắc phải. giờ em muốn bỏ thêm 1 ký tự nữa có được k bác

*grab popcorn* viết 15:51 ngày 01/10/2018

Được chứ, ta sẽ dùng %*[char] để ignore những char đi
http://www.cplusplus.com/reference/cstdio/scanf/

"%d%*[,.]%[^,.]%*[,.]%lf"

Bài liên quan
0