我对Haskell还是很陌生,正在编写一些简单的文本/文件操作功能。我目前正在尝试将字符串添加到文件中之前对其进行修改。
我有一个函数'insertChar',它在字符串的任何给定位置添加一个字符(使用Haskell https://wiki.haskell.org/99_questions/21_to_28中99个问题中的问题21的解决方案)。
info.plist
要求用户输入字符串,然后输入希望添加到该字符串的字符,最后输入希望添加该字符的字符串位置。我可以很好地输入字符串,但是在输入字符后按Enter键时,用于输入位置的'getLine'被跳过,并产生以下错误;
<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>
我已经看到了这个堆栈溢出的帖子; haskell -skipping getLine
,并尝试按照该答案将代码更改为;
public class first_test {
WebDriver driver = new ChromeDriver();
@BeforeTest
public void tearup()
{
WebDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
driver.get("https://accounts.google.com");
}
@Test
public void mail() throws InterruptedException {
WebElement email=driver.findElement(By.id("identifierId"));
email.click();
email.sendKeys("sharfulumair");
WebElement password=driver.findElement(By.id("//*[@name=\"password\"]"));
password.click();
password.sendKeys("abcd");
}
@AfterTest
public void teardown()
{
driver.close();
}
}
但是,它仍然会产生相同的错误。知道我在做什么错吗?
答案 0 :(得分:2)
感谢威廉·范·昂塞姆(Willem Van Onsem)对我的原始问题的评论,我已经找到了解决方案。我在“ putStrLn“插入位置””行之后添加了“ getLine”,因此代码现在看起来像这样;
import System.Environment
import System.Directory
import System.IO
import Data.List
main :: IO ()
main = do
putStrLn "Insert a string"
word <- getLine
putStrLn "Insert a char"
char <- getChar
putStrLn "Insert a position"
temp <- getLine *line that has been added*
pos <- getLine
let x = (read pos :: Int)
putStrLn "Adding char to list..."
let newS = [(insertChar char word x)]
putStrLn "Printed list: "
print (newS)
putStrLn "Insert file name"
file <- getLine
putStrLn "Adding new string to file..."
add file newS
insertChar :: a -> [a] -> Int -> [a]
insertChar x ys 1 = x:ys
insertChar x (y:ys) n = y:insertChar x ys (n-1)
add :: String -> [String] -> IO ()
add fileName [item] = appendFile fileName item
答案 1 :(得分:0)
您导入了正确的内容,但从未真正调用它!试试这个:
main = do
hSetBuffering stdin NoBuffering
-- ...all the rest of your original main, exactly as it used to be
这样,当它到达getChar
行时,只要您按下一个键,它就会从getChar
返回-不必等到按Enter键。 UI会更有意义,代码也将有意义,因为您不需要吞下用户实际上并不想输入的幻像换行符。