鱼非子 发表于 2020-10-16 11:54:26

关于输入一段整形数据,空格分开,用一段程序统计数据个数

#include <stdio.h>
int main()
{
       
        int i=0;
        char *temp;                                                      //定义一个字符指针
        printf("请输入数据,并用空格分开:");
        while(getchar()!=EOF)                                       //EOF是监测输入的数据是否完毕
        {
                getchar();                                                //用getchar在循环体里面一个一个的接受缓存中的字符数据
                *temp=getchar();                                    //接收到的单个字符数据赋值给指针
                if(getchar()==' ')                                     //如果接收到的字符是空格键,则认为对应一个数据,技术变量i加1
               {
                i++; }
               temp++;                                             // 指针指向下一个字符单元接受getchar接受到的字符
               
        }
        printf("这份数据共有%d份数据。",i);               //打印出统计空格键的计数i,就是整形数据的数量
        return 0;
}
我感觉整个逻辑没有问题啊,但是为什么编译过去了,运行时输入一段数据后,运行的界面就运行错误报警?

xieglt 发表于 2020-10-16 12:56:17

本帖最后由 xieglt 于 2020-10-16 12:58 编辑

char * temp 没分配内存!
简单点
char * temp;
char buffer;
temp = buffer;
...

或者
#include <stdlib.h>

char * temp;
temp = (char *)malloc(1024);

...
free(temp);

xieglt 发表于 2020-10-16 13:07:32

本帖最后由 xieglt 于 2020-10-16 13:25 编辑

如果你不需要保存输入的数据,只需要统计输入的数据有几份,可以这么写。


#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        int i=0;
        char c1,c2;
      c2= ' ';
       
        printf("请输入数据,并用空格分开:");

        while((c1 = getchar())!= '\n')
        {
                c2 = c1;

                if(c2 == ' ')
                {
                        i++;
                }
        }

        if(c2 != ' ')
        {
                i++;
        }

        printf("这份数据共有%d份数据。",i);

    return 0;
}

如果需要保留输入内容,可以这么写



#include <stdio.h>
#include <stdlib.h>

#define MEM_SIZE        (12)

int main(void)
{
        int i=0;
        int count = 0;
        int oldSize = 0;
        char c1,c2;
        char * buffer;
        char * temp;


        buffer = (char *)malloc(MEM_SIZE);
        temp = buffer;
       
        printf("请输入数据,并用空格分开:");

        c2 = ' ';

        while((c1 = getchar())!= '\n')
        {
                c2 = c1;
               
                temp = c2;

                if(count >= MEM_SIZE)
                {
                        oldSize += MEM_SIZE;
                        buffer = (char *)realloc(buffer,oldSize + MEM_SIZE);
                        temp = buffer + oldSize;
                        count = 0;
                }

                if(c2 == ' ')
                {
                        i++;
                }
        }

        temp = 0;

        if(c2 != ' ')
        {
                i++;
        }

        printf("这份数据共有%d份数据。",i);

        free(buffer);
    return 0;
}
页: [1]
查看完整版本: 关于输入一段整形数据,空格分开,用一段程序统计数据个数