尝试读取前10个字符(使用读取系统调用,如果在指定数量的字符之前到达文件末尾时自动停止)到数组中, 显示控制台上读取的字符, 关闭文件(使用关闭系统调用)。
////这是我的代码/////没有包含标题////
Scanner input = new Scanner(System.in);
int value;
for (;;) {
System.out.println("Enter number between 1 and 10:");
if (! input.hasNextInt()) {
System.out.println("** Not a number");
input.nextLine(); // discard bad input
continue; // prompt again
}
value = input.nextInt();
if (value < 1 || value > 10) {
System.out.println("** Number must be between 1 and 10");
input.nextLine(); // discard any bad input following number
continue; // prompt again
}
if (! input.nextLine().trim().isEmpty()) {
System.out.println("** Bad input found after number");
continue; // prompt again
}
break; // we got good value
}
// use value here
// don't close input
它打印最多10个字符,就像我想要的那样,但由于某种原因,它会打印出额外的未知字符。任何人都知道如何解决这个问题?
答案 0 :(得分:1)
Abhay Nayak的答案很接近,但是由于你在缓冲区中读了10个字符,所以你需要memset 11个字节,而不是10个字符,以确保空字符跟在你的最后一个字符之后。
memset( buf, 0, 11 );
这可能有点矫枉过正,但在一般情况下,您应该清除整个缓冲区以确保安全。 注意:我刚刚评论了Abhay的帖子,但我没有足够的声望点。
答案 1 :(得分:0)
使用memset清除缓冲区,然后使用
进行读取memset(buf,0,10);