아래 코드에서 몇 가지 문제가 발생했습니다 ...문자열을 동적으로 플로트로 변환
코드의 주요 개념은 행을 한 줄씩 읽고 부동 문자열을 부동 소수점으로 변환하고 부동 소수점을 저장하는 것입니다 배열은 nfloat
입니다. N = 3
3
[9.3,1.2,87.9]
[1.0,1.0]
[0.0,0.0,1.0]
제 번호 3
우리가 볼 수있는 벡터의 수가이 경우 N = 문자열의 수 :
입력이 함유 .txt
인 이미지에서 숫자는 정적이 아니며 입력은 3
대신 5
또는 7
등이 될 수 있습니다.
지금까지 내가 (단지 1 벡터의 경우에), 다음을 수행하기 시작했지만 코드는 일부 메모리 오류가 나는 생각이 있습니다
int main(){
int n; //number of string, comes in the input
scanf("%d\n", &n);
char *line = NULL;
size_t len = 0;
ssize_t read;
read = getline(&line,&len,stdin); //here the program assigns memory for the 1st string
int numsvector = NumsVector(line, read);//calculate the amount of numbers in the strng
float nfloat[numsvector];
int i;
for (i = 0; i < numsvector; ++i)
{
if(numsvector == 1){
sscanf(line, "[%f]", &nfloat[i]);
}
else if(numsvector == 2){
if(i == 0) {
sscanf(line, "[%f,", &nfloat[i]);
printf("%f ", nfloat[i]);
}
else if(i == (numsvector-1)){
sscanf((line+1), "%f]", &nfloat[i]);
printf("%f\n", nfloat[i]);
}
}
else { //Here is where I think the problems are
if(i == 0) {
sscanf(line, "[%f,", &nfloat[i]);
printf("%f\n", nfloat[i]);
}
else if(i == (numsvector-1)) {
sscanf((line+1+(4*i)), "%f]", &nfloat[i]);
printf("%f\n", nfloat[i]);
}
else {
sscanf((line+1+(4*i)), "%f,", &nfloat[i]);
printf("%f\n", nfloat[i]);
}
}
}
글쎄, 문제는 내가 생각 sscanf
지시와 함께 두 개의 부동 소수점 또는 하나가있는 문자열의 경우 코드가 제대로 작동하지만 3 개 이상의 부동 소수점의 경우 코드가 제대로 작동하지 않아 이유를 이해할 수 없습니다.
여기에서 I 너무 기능을 첨부하지만, 그것은 올바른 것 같습니다 ... 문제의 초점은 메인에 남아 있습니다.
int NumsVector(char *linea, ssize_t size){
int numsvector = 1; //minimum value = 1
int n;
for(n = 2; n<= size; n++){
if (linea[n] != '[' && linea[n] != ']'){
if(linea[n] == 44){
numsvector = numsvector + 1;
}
}
}
return numsvector;
}
어디에서 문제를 해결할 수 있습니까?
'(line + 1 + (4 * i)) '을 (를) 계산할 수있는 것은 아무것도 없습니다. 귀하의 수레가 3 자 길이라고 가정하고 있지만, 귀하가 제공 한 데이터에서도 사실이 아닙니다. 나는 접근법이 잘못되었다고 생각합니다. 어떤 종류의 토큰 화가 필요합니다. 어쩌면 strtok을 사용할 수도 있습니다. – john
네, 똑같은 생각하지만 sscanf 문만 사용할 수 있습니다 : ( – Gera
코드에서 [tag : C++]과 관련된 내용을 볼 수 없습니다. 태그를 제거하거나 그 중 하나를 골라야합니다. –