使用read系统调用C ++输出文本

时间:2016-04-23 00:31:25

标签: c++ filesystems user-permissions

尝试读取前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个字符,就像我想要的那样,但由于某种原因,它会打印出额外的未知字符。任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

Abhay Nayak的答案很接近,但是由于你在缓冲区中读了10个字符,所以你需要memset 11个字节,而不是10个字符,以确保空字符跟在你的最后一个字符之后。

memset( buf, 0, 11 );

这可能有点矫枉过正,但在一般情况下,您应该清除整个缓冲区以确保安全。 注意:我刚刚评论了Abhay的帖子,但我没有足够的声望点。

答案 1 :(得分:0)

使用memset清除缓冲区,然后使用

进行读取
memset(buf,0,10);