[英]scanf issue when reading input from pipe
我正在用C編寫程序,我正在嘗試創建一個自動化測試程序。 將產生一個進程,其I / O通道(stdin,stdout和stderr)將被重定向到“黑盒測試模塊”。 讓我們假設一個涉及兩個數相乘的簡單程序。 在這種情況下,要測試的程序如下所示:
#include<stdio.h>
int main()
{
int a, b, numTc, i = 0; //numTc being the number of test cases
scanf("%d",&numTc);
for(;i < numTc; i++)
{
scanf("%d%d",&a,&b); //Facing issue here
printf("%d\n",a*b);
}
}
黑盒測試模塊首先將該程序的I / O通道重定向到管道,然后使用write()
系統調用首先寫入測試用例的數量,然后是測試用例本身。
我面臨的問題是:進程掛在第二個scanf上,如上所示。 如果我構造整個輸入緩沖區並在追加“\\ n”后將其寫入管道,那么事情就可以了。
但是,我想逐個實現功能。
以下是黑匣子模塊的邏輯:
以上工作正常。 但是,黑匣子模塊應該能夠逐個編寫測試用例。
您是否正在嘗試讀取彼此相鄰的兩個單位數整數? 如果是這樣,您可以考慮使用%1d
。
有一個輸入的例子會很有幫助。
您的問題很可能是管道的標准I / O與標准I / O到終端的行為不同。 寫入終端時默認為線路緩沖; 寫入管道時它是完全緩沖的。 所以,你的程序需要fflush(stdout);
printf()
之后實際向下發送數據管道。
嚴格來說,你應該檢查scanf()
的返回值,以確保你得到你期望的。 如果第一個scanf()
沒有返回1或第二個沒有返回2,那么你就遇到了問題。
您可以通過打開日志文件來查看正確讀取的內容,從而調試問題。 確保將輸出刷新到該日志文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.