1
最近我從Windows的cmd.exe移到PowerShell。後來我發現微軟決定放棄標準stdin重定向方法abc.exe < input.txt
並建議使用Get-Content input.txt | .\abc.exe
。Powershell的管道使用scanf編程
不幸的是,新方法崩潰了我的應用程序。我創造了這個簡單的程序,以發現問題
#include <cstdio>
int main() {
int x = -1;
scanf("%d", &x);
printf("%d", x);
return 0;
}
的來源,發現這個測試程序將返回-1,而不是內部input.txt的數量。
我也測試過像echo 1 | .\abc.exe
和type input.txt | .\abc.exe
這樣的命令,它們都打印-1到stdout。
我將不勝感激任何幫助。
編輯1:$
結果OutputEncoding命令:
IsSingleByte : True
BodyName : us-ascii
EncodingName : US-ASCII
HeaderName : us-ascii
WebName : us-ascii
WindowsCodePage : 1252
IsBrowserDisplay : False
IsBrowserSave : False
IsMailNewsDisplay : True
IsMailNewsSave : True
EncoderFallback : System.Text.EncoderReplacementFallback
DecoderFallback : System.Text.DecoderReplacementFallback
IsReadOnly : True
CodePage : 20127
編輯2:
我創造了這個簡單的程序,看看有什麼用管道輸送到程序:
#include <cstdio>
int main() {
char l;
while(scanf("%c", &l)) {
printf("%d\n", l);
}
return 0;
}
運行後Get-Content input.txt | .\abc.exe
它保持打印10對應於ASCII「換行」字符。
在PowerShell中顯示'$ OutputEncoding'的值。同時重寫本機應用程序以通過字符讀取字符並打印讀取代碼,從而知道究竟是通過什麼進行傳送的。 – PetSerAl
您的**編輯2 **程序不會停在'EOF'上,並繼續打印最後一個字符。它應該是'while(scanf(「%c」,&l)!= EOF)''。我也編譯你的第一個測試程序,它對我來說工作得很好。我鍵入:'echo 12345 | 。\ test.exe「,並打印」12345「。 – PetSerAl
最近我一直在搞PowerShell,以使Python在控制檯中正確顯示Unicode字符(例如:'print'ąę'''在控制檯中產生ae')。當我這樣做時,我已經找到了添加這些行的解決方案:[Console] :: InputEncoding = [System.Text.Encoding] :: UTF8', '[Console] :: OutputEncoding = [System.Text.Encoding] :: UTF8'到PS配置文件配置。結果是scanf收到了附加的字節。 –