446044147 446044147-B08 446044147-A38 446044217 446044217-B36 446044217-B52 446044217-B30 446044217-B42 446044217-B04 446044220 446044220-B36 446044220-A52 446044220-A30 446044220-B04 446044220-A42
Em có một file txt có định dạng như trên với 446044147- id của trạm dừng, 446044147-B08: id của trạm dừng và số hiệu của tuyến đi qua trạm dừng. Làm thế nào để em lấy được dữ liêu dưới dạng
446044147 B08 A38 446044217 B36 B52 B30 B42 B04
Mong các anh gợi ý ạ.
Xin lỗi mọi người về câu hỏi không rõ ràng. Mình xin rút kinh nghiệm lần sau. Vấn đề của mình là mình cần tạo một mảng struct với ID = 446044147 và một mảng string Key= [B08,A38]. Và mình không nghĩ ra cách viết ra vòng lặp thế nào để mà vòng lặp đó bắt đầu từ dòng bắt đầu chứa Key và dừng lại tại dòng cuối cùng chứa Key của ID đó. Code ví dụ:
#define MAXSTOP 50
#define MAX 200
typedef struct busStop {
int id;//id:446044147
char key[MAXSTOP][5];// B08,A38
}busStop;
busStop bs[MAX];
int main () {
FILE *fin, *fout;
if((fin = fopen("filein.txt", "r")) == NULL ){
printf("Cannot open file");
return -1;
}
else if((fout = fopen("fileout.txt", "w")) == NULL ){
printf("Cannot open file");
return -1;
}
int i = 0, j = 0;// counter
char ch;
int c1;
while((ch = fputc(fin)) != EOF) {
/*lay du lieu tu file input*/
fscanf(fin, "%[^\n]", &bs[i].id);
while(*dieu kien ket thuc vong lap*) {
fscanf(fin, "%d-%[^\n]", &c1, &bs[i].key[j]);
j++;
}
/*in ra file output*/ fprintf(fout, "%d\n", bs[i].id); for(int k = 0; k < j; k++) { fprintf(fout, "%s ", bs[i].key[j]); } fprintf(fout,"\n\n"); } fclose(fin); fclose(fout); return 0;}
Và mình không nghĩ ra điều kiện kết thúc vòng lặp là gì
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?