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

  • Đọc cả dòng
  • Viết hàm tách thành phần theo dấu phẩy.

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;
}
5 Likes

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”

3 Likes

[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.

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

2 Likes

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

Mình có ví dụ ở trên rồi mà :smiley:
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.

2 Likes

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.

Ho và tên ko cần truyền địa chỉ đâu :smiley:
:penguin: Ở 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.

2 Likes

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

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

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

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?