我想出了一個想法來提高我的詞彙量。這個想法是在文件中有大量最常見的英語單詞。 然後,我會編寫一個程序,一次顯示屏幕上的文字。如果我認出這個詞,我按DOWN鍵 移動到下一個單詞,否則我按'S'將這個單詞保存到名爲Unknown.txt的文本文件。以編程方式查找單詞含義並將其打印到文件
當我完成後,我將收集所有我不知道他們的意思的單詞。如果我在這裏停下來,並手動通過每個詞 並與我的詞典查找它的意義,它將需要很多時間學習他們這一切。
但是,如果我有一種方法來以編程方式保存單詞的含義,我可以很容易地打開該文件,並立即學習單詞的含義。這就是我想要的。
的 「10kword.txt」 文件如下所示:
購買
客戶
活躍
響應
實踐
硬件。
這裏是我的代碼至今:
#include <stdio.h>
#include <Windows.h>
void cls(void *hConsole);
int main(void)
{
FILE *inp, *out;
if (fopen_s(&inp, "10kWords.txt", "r")) {
fprintf(stderr, "Unable to open input file\n");
return 1;
}
else if (fopen_s(&out, "Unknown.txt", "a")) {
fprintf(stderr, "Error opening file Unknown.txt\n");
fclose(inp);
return 1;
}
char buf[100];
void *hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
while (1) {
//Press the down key to move to the next word
if (GetAsyncKeyState(VK_DOWN) == -32767) {
cls(hConsole);
fscanf_s(inp, "%s", buf, 100);
printf("%s", buf);
}
//Press S to save the word to output file
else if (GetAsyncKeyState('S') == -32767) {
fprintf(out, "%s\n", buf);
//Obtain word meaning from dictionary Programatically HERE and print it to 'out'
}
else if (GetAsyncKeyState(VK_ESCAPE)) {
break;
}
}
fclose(inp);
fclose(out);
return 0;
}
void cls(void *hConsole)
{
COORD coordScreen = { 0, 0 }; // home for the cursor
DWORD cCharsWritten;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD dwConSize;
// Get the number of character cells in the current buffer.
if (!GetConsoleScreenBufferInfo(hConsole, &csbi))
{
return;
}
dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
// Fill the entire screen with blanks.
if (!FillConsoleOutputCharacter(hConsole, // Handle to console screen buffer
(TCHAR) ' ', // Character to write to the buffer
dwConSize, // Number of cells to write
coordScreen, // Coordinates of first cell
&cCharsWritten))// Receive number of characters written
{
return;
}
// Get the current text attribute.
if (!GetConsoleScreenBufferInfo(hConsole, &csbi))
{
return;
}
// Set the buffer's attributes accordingly.
if (!FillConsoleOutputAttribute(hConsole, // Handle to console screen buffer
csbi.wAttributes, // Character attributes to use
dwConSize, // Number of cells to set attribute
coordScreen, // Coordinates of first cell
&cCharsWritten)) // Receive number of characters written
{
return;
}
// Put the cursor at its home coordinates.
SetConsoleCursorPosition(hConsole, coordScreen);
}
與您的問題無關,但不要使用帶前導下劃線的符號名稱,後跟大寫字母(如變量_Buf)。這些名稱保留給「實現」(即編譯器和標準庫)。也不要使用[magic numbers](https://en.wikipedia.org/wiki/Magic_number_%28programming%29),例如'-32767'。如果你想檢查一個特定的位或位使用位運算符。 –
我在第22行得到這個警告; 'main.cpp(22):警告C4473:'fscanf_s':沒有足夠的參數傳遞格式字符串。 –
@MichaelWalz,實際上我使用了fscanf,但編譯器拒絕編譯代碼,並提出'fscan_s',所以我使用它,並編譯了警告,我忽略了它。 –