这个问题在这里已经有答案了:
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;
}
在这种情况下,如果要输入如上所示的字符串
你好
世界
然后程序输出将是
你好
世界