我一直有一些問題,下面這段代碼...字符串轉換爲浮動動態
代碼的主要思想是按行讀入線和轉換字符字符串轉換爲浮動並保存彩車在名爲nfloat
的數組中。
的輸入是包含此一.txt
:Ñ =串的數量,在這種情況下Ñ = 3
3
[9.3,1.2,87.9]
[1.0,1.0]
[0.0,0.0,1.0]
的第一個數字,3
是載體的,因爲我們可以看到數在圖像中,但該數字不是靜態的,輸入可以是5
或7
等,而不是3
。
到目前爲止,我已經開始做了以下(僅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個或多個浮標的情況下,代碼不能很好地工作,我不明白爲什麼...
這裏我附加功能,但它似乎是正確的...問題的重點仍然是主要的。
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))'的東西。它假設你的浮動長度是三個字符,但即使在你提供的數據中也不是這樣。我認爲這種方法是錯誤的,需要某種標記化,甚至可能使用strtok。 – john
是的,我認爲同樣的事情,但我只能用sscanf的:( – Gera
我看不到相關[標籤:C++]任何聲明。在你的代碼中刪除標籤或選擇其中一個 –