註冊
登錄
論壇
搜尋
標籤
幫助
導航
粉紅風格
亮白風格
淺藍風格
暗紫風格
私人消息 (0)
公共消息 (0)
系統消息 (0)
好友消息 (0)
帖子消息 (0)
動漫基地論壇
»
數位科技板
» 關於C的fstream
 
1
2
3
返回列表
發帖
過客
發短消息
加為好友
過客
當前離線
UID
12128
帖子
2847
主題
6
精華
1
積分
219
閱讀權限
40
來自
空の境界
在線時間
4565 小時
最後登錄
2017-11-4
精靈使
威望
0
貢獻
218
參與
23
GJ
175
註冊時間
2006-1-1
21
#
跳轉到
»
發表於 2013-1-5 16:32
|
只看該作者
回復
20#
Timmm
不過這兩種我們老師上課也都沒有提到...
不知能否傳授一下..。
網路上不知道有哪邊可以看呢..
雖然有找過但是好像都是舊格式的語法
寫上去肯定會被發現
1
評分人數
尤佳理:
格式什麼的沒差啦...能用加會用就好... ...
GJ + 1
TOP
尤佳理
發短消息
加為好友
尤佳理
當前離線
半吊子小尤
UID
30338
帖子
693
主題
98
精華
2
積分
174
閱讀權限
40
來自
虛無的數位海洋
在線時間
10298 小時
最後登錄
2016-3-14
半吊子小尤
風雲使者
威望
0
貢獻
170
參與
72
GJ
613
註冊時間
2010-4-1
22
#
發表於 2013-1-5 16:35
|
只看該作者
可以用兩種變數或string全部讀完再轉回來
要用string的話上方加入#include <string>
然後用if/else分別處理
EX:
#include<iostream>
#include<fstream>
#include <string>
using namespace std;
const int xx = 100;
void xo(string soce[],int& cood);
int main()
{
char ans;
int cood;
string soce[xx];
do
{
cout << "歡迎使用統計軟體"<<endl;
xo( soce, cood);
cout << "重複查詢?:";
cin >> ans;
}
while(ans =='y'|| ans == 'Y');
return 0;
}
void xo(string soce[],int& cood)
{
int i=0;
char name[32],name1[32] ;
double sum = 0;
ifstream in;
ofstream out;
cout <<"請輸入欲統計的成績檔案名稱(1-31字元):";
cin >> name;
in.open(name);
cout <<"請輸入欲儲存檔案名稱(1-31字元):";
cin >> name1;
out.open(name1);
while(in >> soce[i]&& i< xx)
{
if(i % 3 == 0)
{
}
else if(i%3 == 1)
{
}
else
{
sum += atoi(soce[i].c_str());//轉回INT
}
//列出讀到的東西
cout << soce[i] << endl;
i++;
}
//輸出第三項總合
cout << sum << endl;
in.close();
out.close();
}
1
評分人數
過客:
感謝大大了
GJ + 1
TOP
Timmm
發短消息
加為好友
Timmm
(小T)
當前離線
UID
7408
帖子
3022
主題
84
精華
7
積分
596
閱讀權限
70
來自
Maple Leaf Sound
在線時間
18577 小時
最後登錄
2024-1-7
認證會員
威望
4
貢獻
595
參與
16
GJ
3809
註冊時間
2004-6-15
23
#
發表於 2013-1-5 16:42
|
只看該作者
第一個方法不難
只要另外宣告兩個陣列就好
這樣總共三個陣列
(因為txt每一行看起來是3個不一樣的東西,分開存比較好做後續處理)
while(in >> soce[i] >> soce2[i] >> soce3[i] && i< xx){
cout << soce[i] << " " << soce2[i] << " " << soce3[i] << endl;
i++;
}
1
評分人數
過客:
感謝大大。
GJ + 1
TOP
過客
發短消息
加為好友
過客
當前離線
UID
12128
帖子
2847
主題
6
精華
1
積分
219
閱讀權限
40
來自
空の境界
在線時間
4565 小時
最後登錄
2017-11-4
精靈使
威望
0
貢獻
218
參與
23
GJ
175
註冊時間
2006-1-1
24
#
發表於 2013-1-5 16:49
|
只看該作者
感謝 兩位大大熱情的指導 ,小弟有了信心再去拚一次了。(雖然會不會做得出來也不知道)
但還是非常感謝大大
TOP
Timmm
發短消息
加為好友
Timmm
(小T)
當前離線
UID
7408
帖子
3022
主題
84
精華
7
積分
596
閱讀權限
70
來自
Maple Leaf Sound
在線時間
18577 小時
最後登錄
2024-1-7
認證會員
威望
4
貢獻
595
參與
16
GJ
3809
註冊時間
2004-6-15
25
#
發表於 2013-1-5 17:18
|
只看該作者
提醒一下
while( in >> soce[i] >> soce2[i] >> soce3[i] && i < xx )
當 i 到 100 的時候,in 的動作可能會出錯 (100已經超過陣列上限)
所以最好把判斷順序交換一下
while( i < xx && in >> soce[i] >> soce2[i] >> soce3[i] )
這樣當 i 到 100 的時候,in 的動作不會執行 (當 && 前面的判斷已經確定是 false 的時候,&& 後面的判斷會直接被程式略過不做)
1
評分人數
過客:
這個倒是沒想到,感謝大大了。 ...
GJ + 1
TOP
cdes5509
發短消息
加為好友
cdes5509
當前離線
UID
1324
帖子
353
主題
87
精華
0
積分
64
閱讀權限
30
來自
新竹
在線時間
5223 小時
最後登錄
2023-2-8
精靈王
威望
0
貢獻
62
參與
36
GJ
338
註冊時間
2005-3-30
26
#
發表於 2013-1-8 09:13
|
只看該作者
無聊之餘來複習一下...
code
// 上午 09:12 2013/1/8
// Visual Studio 2010
#include <iostream>
#include <fstream>
using namespace std;
#define BUFFER_LEN 256
int Sum(const char* filename)
{
ifstream ifs(filename);
char buffer[BUFFER_LEN];
int sum = 0;
if(!ifs.is_open())
{
cout << "檔案不存在??" << endl;
return 0;
}
while (ifs.getline(buffer, BUFFER_LEN))
{
int id;
char sex;
int score;
sscanf(buffer, "%d %c %d", &id, &sex, &score);
sum = sum + score;
//printf("%d %c %d\n", id, sex, score);
}
ifs.close();
return sum;
}
int main()
{
char filename[BUFFER_LEN];
const char* outputf = "output.txt";
char go;
ofstream ofs(outputf);
printf("歡迎使用統計軟體.\n");
while (true)
{
printf("\n請輸入欲統計的成績檔案名稱(1-255字元):");
cin >> filename;
int sum = Sum(filename);
cout << "Sum: " << sum << endl;
ofs << "File: " << filename << "\nSum: " << sum;
printf("重複查詢?:");
cin >> go;
if (go == 'y' || go == 'Y') ofs << "\n\n";
else break;
}
printf("\n結果存檔於%s ...\n\n", outputf);
ofs.close();
system("pause");
return 0;
}
複製代碼
TOP
 
1
2
3
返回列表
論壇討論
戲說動漫板
休閒生活板
數位科技板
主機租賃
水都威尼斯
基地交流
論壇基礎
板務處理
論壇重要公告
論壇服務信箱
未分區服務信箱
[收藏此主題]
[關注此主題的新回復]
[通過 QQ、MSN 分享給朋友]