凯H 2023-03-12 18:29 采纳率: 81%
浏览 85
已结题

关于#截屏#的问题,如何解决?


#include"stdio.h"
#include"malloc.h"
#define MAXSIZE 100
typedef char datatype;
typedef struct
{
    datatype data[MAXSIZE];
    int last;
}SeqList;
SeqList *CreatList()
{
    SeqList *L;
    L=(SeqList*)malloc(sizeof(SeqList));
    L->last=-1;
    return L;
}
void BuildList(SeqList *L)
{
    int i;
    printf("ÈôÄãÊäÈëµÄÊý¾ÝΪ'0'ʱ£¬Ôò½áÊøÊäÈë\n");
    for(i=0;i<100;i++)
    {
        printf("ÊäÈëÊý¾Ý:");
        scanf("%c",&L->data[i]);
        getchar();
        if(L->data[i]=='0')
        break;
        L->last++;
    }
    if(i==99)
    printf("ÎÞ·¨¼ÌÐø´´½¨£¡\n");
    printf("*************´´½¨³É¹¦£¡*************\n");
}
int InList(SeqList *L,int i,datatype d)
{
    int j;
    if(L->last==MAXSIZE-1)
    {
        printf("˳Ðò±íÒÑÂú!\n");
        return -1;
    }
    if(i<1||i>L->last+1)
    {
        printf("λÖóö´í!\n");
        return 0;
    }
    for(j=L->last+1;j>=i;j--)
    L->data[j]=L->data[j-1];
    L->data[i-1]=d;
    L->last++;
    printf("²åÈë³É¹¦!\n");
    return 1;
}
int DeleteList(SeqList *L,int k)
{
    int j;
    if(k<1||k>L->last+1)
    {
        printf("²»´æÔÚ´ËλÖÃ!\n");
        return 0;
    }
    for(j=k;j<=L->last;j++)
    L->data[j-1]=L->data[j];
    L->last--;
    printf("ɾ³ý³É¹¦!\n");
    return 1;
}
void PrintList(SeqList *L)
{
    int i;
    printf("±íÖеÄÊý¾ÝΪ£º\n");
    for(i=0;i<=L->last;i++)
    printf("%c\n",L->data[i]);
}
int Location(SeqList *L,datatype x)
{
    int i=0;
    while(i<=L->last&&L->data[i]!=x)
    i++;
    if(i>L->last)
    return -1;
    else return i;
}
int LengthList(SeqList *L)
{
    return L->last;
}
int main()
{
    int a,i,result;
    SeqList *L;
    datatype d;
    while(1) 
    {
      printf("\n     ÏßÐÔ±í×Óϵͳ     \n");
        printf("**********************\n");
        printf("*   1------½¨  ±í    *\n");
        printf("*   2------²å  Èë    *\n");
        printf("*   3------ɾ  ³ý    *\n");
        printf("*   4------ÏÔ  ʾ    *\n");
        printf("*   5------²é  ÕÒ    *\n");
        printf("*   6------È¥±í³¤    *\n");
        printf("*   7------ᵠ ȯ    *\n");
        printf("**********************\n");
        printf("Ñ¡Ôñ²Ëµ¥ºÅ£¨1-7£©:\n");
        scanf("%d",&a);
        switch(a)
        {
            case 1:
                L=CreatList();
                BuildList(L);
                break;
            case 2:
                printf("ÇëÊäÈë²åÈëÔªËصÄλÖÃÐÅÏ¢£º");
                scanf("%d",&i);
                printf("\nÇëÊäÈë²åÈëÔªËصÄÖµ£º");
                scanf("%c",&d);
                getchar();
                InList(L,i,d);
                break;
            case 3:    
                printf("ÇëÊäÈëɾ³ýÔªËصÄλÖÃÐÅÏ¢£º");
                scanf("%d",&i);
                DeleteList(L,i);
                break;
            case 4:
                PrintList(L);
                break;
            case 5:
                printf("ÇëÊäÈëÐèÒª²éÕÒµÄÔªËصÄÖµ£º");
                scanf("%c",&d);
                result=Location(L,d);
                if(result==-1)
                printf("\nδÕÒµ½¸ÃÔªËØ!\n");
                else
                printf("¸ÃÔªËصÄλÖÃΪ%d",result+1);
                break;
            case 6:
                printf("µ±Ç°ÏßÐÔ±íµÄ³¤¶ÈΪ£º%d\n",LengthList(L)+1);
                break;
            case 7:
                return 0;
            default:
                printf("±§Ç¸£¬µ±Ç°Ôݲ»ÄÜÂú×ã´ËÏîÒµÎñÐèÇó!");
        } 
    }
}

img


截屏2023-03-12 18.27.55
这是什么原因
为什么显示元素显示为空白

  • 写回答

5条回答 默认 最新

  • 隔壁好友沈叔叔 2023-03-12 19:03
    关注

    这段代码在输入字符时使用了scanf()函数和getchar()函数,但这两个函数的结合使用可能会导致错误。因为在使用scanf()函数输入完字符后,缓冲区中会留下一个换行符,而getchar()函数会读取这个换行符并把它当做下一个输入字符,从而影响到程序的正常运行。

    为了避免这个问题,可以在使用scanf()函数时在格式控制符中加入空格,如将scanf("%c",&L->data[i])改为scanf(" %c",&L->data[i])。这样可以让scanf()函数忽略掉前面的空白字符,包括换行符,从而避免了使用getchar()函数时出现问题。

    你可以这样修改:
    (1)在输入字符时,加入了一个额外的 getchar(),用于吞掉输入缓冲区中的回车符,以避免对后续输入造成干扰。
    (2)LengthList 函数返回的是最后一个元素的下标,而不是元素的个数,所以将其修改为 L->last + 1。
    (3)在输出元素时,每个元素后面加上了一个换行符,以便在输出时每个元素独占一行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月20日
  • 已采纳回答 3月12日
  • 修改了问题 3月12日
  • 创建了问题 3月12日

悬赏问题

  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题