編程要求:
設定一個for回圈,每次輸出一個txt檔案,并且輸出檔案名依次是“3D points-1”、“3D points-2”、“3D points-3”、“3D points-4”等等。
代碼實作:
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
void int2str(int n, char *str);
int main() {
cout << "Hello, World!" << endl;
for (int j = 0; j < 2; j++){
vector<int> num(5);
for(int i = 0; i < num.size(); i++ ){
num[i] = j * 2;
}
char str1[] = "../output/", str2[] = "3D points-", str3[10] , str4[] = ".txt";
char filename[25]; //用來存盤RANSAC之前的3D點集的.txt檔案,檔案名如./output/3D points-1.txt
int2str(j+1, str3);
strcat(filename, str1);
strcat(filename, str2);
strcat(filename, str3);
strcat(filename, str4);
FILE *fp;
fp = fopen(filename, "w");
if (fp == NULL ){
cout << "Cann't open the file!" << endl;
}
for (int i = 0; i < num.size(); i++){
fprintf( fp, "%d\n", num[i] );
}
fclose(fp);
}
return 0;
}
//將整型數j轉換成字串[注:字串就是字符陣列]
void int2str(int n, char *str){
char buf[10] = "";
int i = 0;
int len = 0;
int temp = n < 0 ? -n : n; //temp為n的絕對值
if (str == NULL){
return;
}
while(temp){
buf[i++] = (temp % 10) + '0'; //把temp的每一位上的數存入buf
temp = temp /10;
}
len = n < 0 ? ++i : i; //如果n是負數,則需要多一位來存盤負號
str[i] = 0; //末尾是結束符0
while(1){
i--;
if (buf[len-i-1] == 0) break;
str[i] = buf[len-i-1]; //把buf陣列里的字符拷到字串
}
if (i == 0) str[i] = '-'; //如果是負數,添加一個負號
}
出現的問題:
當上述代碼中的for (int j = 0; j < 2; j++){改為for (int j = 0; j < 1; j++){時,它能夠正確運行,可一旦判斷條件大于或等于2時,它就報錯,不能輸出第2個檔案“3D points-2.txt”,求問為什么!
uj5u.com熱心網友回復:
你還自己去實作int2str,你的int2str也是很多錯誤。為啥不用sprintf呢?或者sprintf_s,它不香嗎?char fileName[64];3D points-1”、
for(int i=0;i<10;++i {
memset(fileName, '\0', sizeof(fileName));
sprintf(fileName, "3D points-%d", i);
FILE *fp;
.....
}
uj5u.com熱心網友回復:
為回圈啥一開始filename要清零呀?uj5u.com熱心網友回復:
謝謝!!!sprintf之前不知道有這個函式uj5u.com熱心網友回復:
就是memset那條陳述句
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/111593.html
標籤:C++ 語言
上一篇:希望可以解答一下
