说我是否想要扫描以下输入:
123456
567234
145689
在java中我会这样做
String x,y,z;
x=scanner.nextline();
y=scanner.nextline();
z=scanner.nextline();
然后x将具有第一行输入,y将具有第二行,而z将具有第三行。
我的问题是在C中怎么做这样的事情?
答案 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的一部分。)