这个人需要休息 2024-05-02 20:50 采纳率: 0%
浏览 3

关于#c语言#的问题:在输入完数据的数量后,还要输入一个数才进行下一步,为啥呀(相关搜索:线性表)

在输入完数据的数量后,还要输入一个数才进行下一步,为啥呀?

img

#include<stdio.h>
#define MAXSIZE 100
typedef int DataType;
typedef struct {
    DataType data[MAXSIZE];
    int Length;
}SeqList;
 
void InitList(SeqList *L) {   //初始化线性表
    L->Length = 0;
}

void CreatList(SeqList* L, int n) {  //建立顺序表并输入多个元素
    int i;
    printf("请输入%d个整数:", n);
    if (n>MAXSIZE) {
        printf("overflow");
        return 0;
    }
    for (i = 0;i < n;i++) {
        scanf("%d", &L->data[i]);    
    }L->Length = i;
}
void Length(SeqList* L) {
    int i;
    for (i = 0;L->data[i] != NULL;i++);
    return i;
}

    void DisList(SeqList * L) {
        int i=0;
        for (i = 0;i<L->Length;i++) {
            printf("%5d",L->data[i]);
        }
    }

int main() {

    SeqList L;
    int n=0;
    InitList(&L);
    printf("请输入建立线性表的个数: \n");
    scanf("%d ",&n);

    CreatList(&L, n);
    printf("建立的线性表为:");
    DisList(&L);


    return 0;
}

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-02 20:50
    关注

    引自免费微信小程序:皆我百晓生

    在给定的C语言代码中,问题出现在CreatList函数中的数据读取部分。当调用scanf("%d", &L->data[i])时,程序会等待用户输入一个整数。然而,在main函数中,当用户输入线性表的大小n之后,由于输入流中还存在一个换行符\n(因为用户通常按回车键结束输入),这个换行符会被下一个scanf语句误认为是一个整数。

    解决这个问题的方法是在读取线性表大小n之后,先清除输入缓冲区,确保接下来的CreatList函数能正确读取用户的输入。可以使用下面的代码片段替换main函数中的相应部分:

    // ...
    printf("请输入建立线性表的个数: \n");
    scanf("%d", &n); // 读取线性表的大小
    
    // 清除输入缓冲区中的换行符
    int c;
    while ((c = getchar()) != '\n' && c != EOF) {}
    
    CreatList(&L, n);
    // ...
    

    这样做的效果是读取了n之后,程序会立即忽略掉直到遇到换行符的所有字符,包括那个多余的换行符。然后CreatList函数就能正常接收用户输入的整数了。修改后的完整main函数如下:

    int main() {
    
        SeqList L;
        int n=0;
        InitList(&L);
        printf("请输入建立线性表的个数: \n");
        scanf("%d", &n);
    
        // 清除输入缓冲区中的换行符
        int c;
        while ((c = getchar()) != '\n' && c != EOF) {}
    
        CreatList(&L, n);
        printf("建立的线性表为:");
        DisList(&L);
    
        return 0;
    }
    

    现在,当你运行程序时,它应该能在输入线性表的大小后立即接受数据输入,而不需要再额外输入一个数。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月2日