说我输入一下: " Hello world" //打了一个新线 "再见世界" //第二次输入
我如何扫描两条线并分别在两个不同的阵列中输入它们。我相信我需要使用getchar直到它击中' \ n'。但是我如何扫描第二个输入。
提前致谢。我是C的初学者,所以请不要指点,因为我还没有涵盖那个主题。
答案 0 :(得分:0)
你应该看的功能是fgets。至少在我的系统上,定义如下:
char *fgets(char * restrict str, int size, FILE * restrict stream);
因此,从键盘读取输入的非常简单的程序将运行如下:
#include <stdio.h>
#include <stdlib.h>
#define MAXSTRINGSIZE 128
int main(void)
{
char array[2][MAXSTRINGSIZE];
int i;
void *result;
for (i = 0; i < 2; i++)
{
printf("Input String %d: ", i);
result = fgets(&array[i][0], MAXSTRINGSIZE, stdin);
if (result == NULL) exit(1);
}
printf("String 1: %s\nString 2: %s\n", &array[0][0], &array[1][0]);
exit(0);
}
在我的系统上编译并正确运行。但fgets的唯一问题是在字符串中保留换行符\ n。因此,如果您不想这样,则需要将其删除。对于* FILE参数,stdin是预定义的* FILE结构,表示标准输入或文件描述符0.还有标准输出的stdout(文件描述符1)和错误消息和诊断的stderr(文件描述符2)。文件描述符编号对应于shell中使用的编号:
$$$ - &GT; cat somefile&gt; someotherfile 2&gt;&amp; 1
这样做是取出文件描述符2的outfile并将其重定向到1,然后将1重定向到文件。另外,我正在使用&amp;运算符,因为我们正在寻址数组的部分,并且有问题的函数(fgets,printf)需要指针。至于结果,gets和fgets的手册页说明如下:
返回值 成功完成后,fgets()和gets()返回指向字符串的指针。如果在读取任何字符之前发生文件结束, 它们返回NULL并且缓冲区内容保持不变。如果 发生错误,它们返回NULL并且缓冲区内容为 不定。 fgets()和gets()函数无法区分 在文件结束和错误之间,调用者必须使用feof(3)和 ferror(3)确定发生了什么。
因此,为了使代码更加健壮,如果获得NULL结果,则需要使用feof检查错误或使用feof检查文件结尾并批准响应。此外,永远不要 EVER 使用。您可以安全使用它的唯一方法是您必须能够看到未来,显然没有人可以这样做,它无法安全使用。它只会打开你的缓冲区溢出攻击。
答案 1 :(得分:0)
尝试使用此代码:
bytea
这里我使用二维数组来存储字符串。我按字符读取输入字符。首先我创建一个继续读取字符的无限循环。如果用户输入文件字符的结尾,则输入停止。如果有换行符,则flx变量递增,下一个字符存储在下一个数组位置。您可以引用以b [n]存储的字符串,其中n是索引。