C中java的scanner.nextline()的等价物?

时间:2017-11-02 22:06:43

标签: java c input

说我是否想要扫描以下输入:

123456
567234
145689
在java中

我会这样做

String x,y,z;
x=scanner.nextline();
y=scanner.nextline();
z=scanner.nextline();

然后x将具有第一行输入,y将具有第二行,而z将具有第三行。

我的问题是在C中怎么做这样的事情?

2 个答案:

答案 0 :(得分:0)

"%d"表示输入值为数字。

int a,b,c;
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);

答案 1 :(得分:0)

正如评论中提到的,您应该使用POSIX getline()函数。这是对你所追求的适度近似值:

#define _GNU_SOURCE /* Necessary on an embarrassingly old version of RHEL */
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    // String x,y,z;
    //x=scanner.nextline();
    //y=scanner.nextline();
    //z=scanner.nextline();

    size_t x_sz = 0, y_sz = 0, z_sz = 0;
    char *x = 0, *y = 0, *z = 0;
    int x_len = getline(&x, &x_sz, stdin);
    int y_len = getline(&y, &y_sz, stdin);
    int z_len = getline(&z, &z_sz, stdin);

    printf("x: size = %zu, len = %d, data = [%s]\n", x_sz, x_len, x);
    printf("y: size = %zu, len = %d, data = [%s]\n", y_sz, y_len, y);
    printf("z: size = %zu, len = %d, data = [%s]\n", z_sz, z_len, z);

    free(x);
    free(y);
    free(z);
    return 0;
}

当在自己的源上运行时,它会产生:

x: size = 120, len = 77, data = [#define _GNU_SOURCE /* Necessary on an embarrassingly old version of RHEL */
]
y: size = 120, len = 19, data = [#include <stdio.h>
]
z: size = 120, len = 20, data = [#include <stdlib.h>
]

强调新行包含在getline()读取的字符串中。您可能不需要现代系统上的#define,但它确实依赖于您正在使用的编译器。 GCC 5.x及以上默认为C11(对C11的GNU扩展,又名-std=gnu11)。这在这台机器上还不够,但是这台机器已经运行了旧版本的RHEL,并且标头声明getline()不是POSIX的一部分,自POSIX 2008以来一直没有这样做(也就是说,getline() 是POSIX 2008的一部分。)