[英]Reading in integers from a text file
對於我正在從事的項目,我試圖從文本文件中讀取整數。 在這種情況下,它們被格式化為變量,例如U = 220V,因此我試圖從等號到V的后面讀取。這是我想出的代碼:
if (word[0] == 'U') {
//declaring variables for checking for certain letters
char v = 'V';
char m = 'm';
char M = 'M';
//taking in integer for voltage
while (word[i] != v) {
volt = volt + word[i];
i++;
}
cout << volt << endl;
在測試案例中,有3個值分別隨機插入整個文件中,分別為U = 200V,U = 220V和U = 22000mV(m為毫,以后將使用其他函數進行處理)。 經過測試后,我收到輸出:
200
200
20000m
第一個輸出正確。 在第二種和第三種情況下,它似乎首先放寬了該數字,而在第三種情況下,它在末尾又添加了一個零。 我本來以為只是丟棄第一個值,所以我更改了代碼行
volt = volt + word[i];
至
volt = volt + word[i-1];
看看它會在最初讀取該值之前先讀取什么值。在這種情況下,如果它工作正常,它會執行我期望的操作,輸出格式為:
=200
=200
=20000m
我在這里忽略的代碼邏輯是否存在缺陷?
編輯:在嘗試進一步調試它時,我將最終的打印行從while循環外移到了它的內部,以查看循環逐步輸出的內容。 它似乎從2開始,並在每次迭代的末尾繼續添加0,直到結束200000m
似乎問題在於每次迭代后i和volt的值都不會重置。 為了解決這個問題,我添加了以下代碼行:
volt = "";
i = 2;
(在這種情況下,i設置為2,以便在解析時忽略原始的V和=)然后我再次運行程序,打印出要測試的值,現在似乎輸出了正確的值。 因此,更新后的整個代碼塊如下所示:
while (myfile >> word) {
volt = "";
i = 2;
//printing out words (remove)
cout << word << endl;
//checking for U in words
if (word[0] == 'U') {
//declaring variables for checking for certain letters
char v = 'V';
char m = 'm';
char M = 'M';
//taking in integer for voltage
while (word[i] != v) {
volt = volt + word[i];
i++;
//cout << volt << endl;
}
cout << volt << endl;
您的代碼中有什么? 該字符串:“ volt = volt + word [i];” -僅取2個數字“ 2”(這是50)和1個數字“ 0”(這是48)的ASCII碼。 然后我得出結果:50 + 50 + 48 = 148。 我修改了這段代碼。 這里是! 但是這里有使用AnsiString和StrToInt函數。
int volt=0, i=2;
char word[20] = "U=220V\0";
AnsiString String;
if(word[0] == 'U'){
//declaring variables for checking for certain letters
char v = 'V';
char m = 'm';
char M = 'M';
while(word[i] != v){
//volt = volt + word[i];
String += word[i];
i++;
}
//cout << volt << endl;
volt = StrToInt(String);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.