确认输入分段故障后弹出,我看不清楚原因。我被告知在循环中使用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
答案 0 :(得分:1)
问题几乎肯定在pos = strchr(buffer, space);
行。如果输入不包含空格字符,则将pos设置为NULL。将NULL传递给strstr()可能会导致SEGV。