30/09/2018, 16:07

Lỗi cú pháp vòng lặp while

Yêu cầu: Viết chương trình sắp xếp các dòng kí tự được nhập từ bàn phím theo thứ tự ABC.

#include <stdio.h>
#include<stdlib.h>
#define MAXLINES 5000
#define MAXLEN 1000
char *lineptr[MAXLINES];
int read_lines(char *lineptr[],int MAXLINES1);
void write_lines(char *lineptr[], int nlines);
void comparison(char *lineptr[],int nlines);
int getline(char line[],int MAXLENS);
void strcpy(char *p,char line[]);
int main()
{
    int nlines;
    if((nlines=read_lines(lineptr,MAXLINES))>=0)
    {
        comparison(lineptr,nlines);
        write_lines(lineptr,nlines);
        return 0;
    }
    else
    {
        printf("error:input too big to sort
");
        return 1;
    }
}
int read_lines(char *lineptr[],int MAXLINES1)
{
    int len,nlines=0;
    char *p,line[MAXLEN];
    while((len =getline(line,MAXLEN))>0)
        if(nlines>=MAXLINES1 ||(p=(char*)malloc(len))==NULL)
            return -1;
        else
        {
            line[len -1]='';
            strcpy(p,line);
            lineptr[nlines++]=p;
        }
    return nlines;
}
void write_lines(char *lineptr[],int  nlines)
{
    int i;
    for(i=0; i<nlines; i++)
        printf("%s
",lineptr[i]);
}
int getline(char line[],int MAXLENS)
{
    int i;
    char c;
    while(i=0;i<MAXLENS-1&&(c=getchar())!=EOF&&c!='
';i++)
        line[i]=c;
    if(c=='
')
    {
        line[i]='
';
        i++;
    }
    line[i]='';
    return i;
}
void strcpy(char *p,char line[])
{
    int i=0;
    p=line;
    while((*p=line[i])!='')
    {
        i++;
        p++;
    }
}
void comparison(char *lineptr[],int nlines)
{
    char *c;
    for(int i=0; i<nlines; i++)
    {
        for(int j=0; j<nlines; j++)
        {
            if(lineptr[i][1]>lineptr[j][1])
            {
                lineptr[i]=c;
                lineptr[i]=lineptr[j];
                lineptr[j]=c;
            }

        }
    }
}

Báo lỗi ở

    while(i=0; i<MAXLENS-1&&(c=getchar())!=EOF&&c!='
'; i++)
        line[i]=c;
Nguyễn Minh Dũng viết 18:17 ngày 30/09/2018

Code bị lỗi gì @14520054?

A sửa lại

while(i=0;i<MAXLENS-1&&(c=getchar())!=EOF&&c!='\n';i++)
    line[i]=c;

Thành

for(i=0; (i < MAXLENS-1) && ((c = getchar()) != EOF ) && (c != '\n'); i++)
    line[i]=c;

Không nên đặt câu hỏi như thế này nhé @14520054, tiêu đề không thể hiện được nội dung. Tạo topic để hỏi nhưng không có câu hỏi. @14520054 cũng không nói là lỗi chỗ nào, cách hoạt động của chương trình ra sao.

BaoLe viết 18:17 ngày 30/09/2018

Lúc chạy chương trình cũng báo lỗi như anh nói nhưng em chả pk sửa sao cả.Thank you anh nhiều.

BaoLe viết 18:23 ngày 30/09/2018

Em sẽ rút kinh nghiệm.

Nguyễn Minh Dũng viết 18:23 ngày 30/09/2018

A sửa lại nội dung rồi đấy, nếu em đặt câu hỏi rõ ràng hơn thì anh sẽ tìm ra lỗi nhanh hơn.

BaoLe viết 18:12 ngày 30/09/2018

Nhờ mọ người kiểm tra lại giúp minh 2 phần sau:

        {
            line[len -1]='\0';
            strcpy(p,line);
            lineptr[nlines++]=p;
        }
int i=0;
    p=line;
    while((*p=line[i])!='\0')
    {
        i++;
        p++;
    }

Chương trình của mình khi build thì không có lỗi gì nhưng khi nhập dữ liệu đề thực hiện thì nó lại thoát ra. Mình có kiểm tra lại nhiều lần, thì chỉ có 2 phần trên là có vấn đề, nhưng chưa biết sửa lại như thế nào.

Nguyễn Minh Dũng viết 18:17 ngày 30/09/2018

Vẫn là chương trình trên hả @14520054, em có sửa code gì mới không? Có thì gửi lại tối anh rảnh xem thử cho

BaoLe viết 18:16 ngày 30/09/2018
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXLINES 5000
#define MAXLEN 1000
char *lineptr[MAXLINES];
int read_lines(char *lineptr[],int MAXLINES1);
void write_lines(char *lineptr[], int nlines);
int getline(char line[],int MAXLENS);
void compare(char *lineptr[],int nlines);
int main() {
    int nlines;
    if((nlines=read_lines(lineptr,MAXLINES))>=0) {
        compare(lineptr,nlines);
        write_lines(lineptr,nlines);
        return 0;
    } else {
        printf("error:input too big to sort\n");
        return 1;
    }
}
int read_lines(char *lineptr[],int MAXLINES1) {
    int len,nlines=0;
    char *p,line[MAXLEN];
    while((len=getline(line,MAXLEN))>1)
        if(nlines>=MAXLINES1 ||(p=(char*)malloc(len))==NULL)
            return -1;
        else {
            line[len -1]='\0';
            strcpy(p,line);
            lineptr[nlines++]=p;
        }
    return nlines;
}
void write_lines(char *lineptr[],int nlines) {
    while((nlines--)>0)
        printf("%s\n",*lineptr++);
}
int getline(char line[],int MAXLENS) {
    int i;
    char c;
    for(i=0; i<MAXLENS-1&&(c=getchar())!=EOF&&c!='\n'; i++)
        line[i]=c;
    if(c=='\n') {
        line[i]='\n';
        i++;
    }
    line[i]='\0';
    return i;
}
void compare(char *lineptr[],int nlines) {
    char *tiep;
    for(int i=0; i<nlines; i++) {
        for(int j=0; j<nlines; j++) {
            if(strcmp(lineptr[i],lineptr[j])<0) {
                tiep=lineptr[i];
                lineptr[i]=lineptr[j];
                lineptr[j]=tiep;
            }
        }
    }
}

Em viết lại code rồi nek.Anh kiểm tra lại giúp em với.

Bài liên quan
0