import Control.Monad
import Data.Char
main = forever $ do
putStr "Give me some input: "
l <- getLine
putStrLn $ map toUpper l
我一直在学习Haskell,因为你学习了哈克尔。当我尝试运行此代码时,它的行为并不像它应该的那样。
l
Give me some input: L
abc
Give me some input: ABC
当我运行它时,它不会首先打印字符串,我可以输入。提供一些输入后,在这种情况下l
它会返回我:Give me some input: L
。
它应该做的是,通过打印Give me some input:
请求输入,输入后它将以大写形式返回输入。
我该如何解决这个问题?
答案 0 :(得分:2)
正如Michail指出的那样,这是一个缓冲问题,stdout
import Control.Monad
import Data.Char
import System.IO
main = do
hSetBuffering stdout NoBuffering
forever $ do
putStr "Give me some input: "
l <- getLine
putStrLn $ map toUpper l
可以解决这个问题:
import Control.Monad
import Data.Char
import System.IO
main = do
forever $ do
putStr "Give me some input: "
hFlush stdout
l <- getLine
putStrLn $ map toUpper l
如果由于某种原因您不想更改整个程序的hSetBuffering
,您可以使用buffer mode在您需要的地方进行额外的缓冲刷新:< / p>
Intent sendIntent = new Intent("android.intent.action.MAIN");
sendIntent.SetComponent(new ComponentName("com.whatsapp", "com.whatsapp.Conversation"));
sendIntent.SetType("text/plain");
sendIntent.PutExtra("jid", phone_number + "@s.whatsapp.net");
sendIntent.PutExtra(Intent.ExtraText, "extra_text test");
sendIntent.PutExtra("sms_body", "sms_body test");
sendIntent.PutExtra("body", "body test");
sendIntent.PutExtra("text", "text test");
context.StartActivity(sendIntent);
答案 1 :(得分:1)
试试这个:
import Control.Monad
import Data.Char
main = forever $ do
putStrLn "Give me some input: "
l <- getLine
putStrLn $ map toUpper l
这里的问题是putStr
没有写新行。并且输出缓冲区仅在换行符上刷新。