确认输入后,会弹出细分错误,我看不到原因。有人告诉我在循环中使用fgets
和sscanf
从终端输入读取未定义数量的浮点数,这就是我想出的。
码
#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/