确认输入后,会弹出细分错误,我看不到原因。有人告诉我在循环中使用fgetssscanf从终端输入读取未定义数量的浮点数,这就是我想出的。



#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#define EMPTY 3.141592
#define BUFFERSIZE 100

void removeSubstring(char *s,const char *toremove){
  while( (s=strstr(s,toremove)) )
    memmove(s,s+strlen(toremove),1+strlen(s+strlen(toremove)));
}

int main(){

    int x=0;
    int y=0;
    float a[BUFFERSIZE] = {EMPTY};
    char buffer[BUFFERSIZE] = {EMPTY};
    char *pos;
    char *start = 0;
    int space = ' ';

    printf("Input: ");
    fgets(buffer, BUFFERSIZE, stdin);

    while(x< BUFFERSIZE){
            sscanf(buffer, "%f ", &a[x]);
            pos = strchr(buffer, space);
            removeSubstring(start, pos);
            x++;
            }

    printf("Saved input: ");
    while(y<BUFFERSIZE && a[y] != EMPTY){
            printf("%.2f", a[y]);
            y++;
            }

    printf("\n");

    return 0;
}


编辑:增加了数组大小并删除了feof

最佳答案

几乎可以肯定,问题出在pos = strchr(buffer, space);行中。如果输入不包含空格字符,则将pos设置为NULL。将NULL传递给strstr()可能会导致SEGV。

关于c - 终端输入读数 float 时出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47259802/

10-11 16:41