多个字符数组的输入无效[重复]

这个问题在这里已经有答案了
scanf()将新行字符保留在缓冲区中

(五个答案)

17天前关闭

chartofind[100];
字符替换[100];
int pos=0;
printf(“输入文本:”);
scanf(“%[^\n]”,str);
printf(“输入搜索模式:”);
scanf(“%[^\n]”,toFind);
printf(“输入替换项:”);
scanf(“%[^\n]”,替换);
pos=strnfnd(0,toFind);
条纹(位置,替换);
printf(“顺序文本列表:%s”,str);

这个代码示例允许我读取str的值,但跳过了其他两个scanf。我不知道为什么。
我能做些什么来解决这个问题

Ps:str是一个全局字符数组

调用scanf

scanf(“%[^\n]”,str);

输入缓冲区中仍然存在新行字符'\n'

所以下一次调用scanf

scanf(“%[^\n]”,toFind);

在遇到新行字符“\n”之前一直读取输入的将不读取任何内容

你应该写一个例子

scanf(“%[^\n]]*c”,str);

从输入缓冲区中删除新行字符'\n'

这是一个演示程序

#包括<标准h>
内部主(空)
{
chars[100];
scanf(“%99[^\n]]*c”,s);
卖出(s);
scanf(“%99[^\n]”,s);
卖出(s);
返回0;
}

在本例中,如果要输入字符串,例如

你好
世界

然后输出将是

你好
世界

另一种更简单的方法是在格式字符串前面加一个空格。比如说

scanf(“%[^\n]”,toFind);
^^^^

在这种情况下,将跳过所有前导空格字符

这是一个演示程序

#包括<标准h>
内部主(空)
{
chars[100];
scanf(“%99[^\n]”,s);
卖出(s);
scanf(“%99[^\n]”,s);
卖出(s);
返回0;
}

在这种情况下,如果要输入如上所示的字符串

你好
世界

然后程序输出将是

你好
世界

发表评论