【发布时间】:2015-04-28 16:36:34
【问题描述】:
你好,我有一个学校的作业,要编写一个程序来查找一个单词并将其替换为文本中的另一个单词。直到现在我还没有完成 char 字符串,我有一个小问题。我需要扫描文本、查找词和替换词,但只有文本 scanf 工作,其他只是跳过..
char w[10000];
char find[10000];
char replace[10000];
int l,c,b,diff,i,k,yes=0,vm;
printf("Text: ");scanf("%[^\n]s",w);
printf("\nFind: ");scanf("%[^\n]s", find);
printf("\nReplace: ");scanf("%[^\n]s", replace);
如果您能说出为什么查找和替换的 scanf 会跳过,我将非常感谢。
抱歉英语不好,不是我的母语。
【问题讨论】:
-
您需要消耗缓冲区中的换行符,由
scanf("%[^\n]%*c",w);完成 -
注意
[^\n]是一个转换说明符,它不是s说明符的修饰符。此外,请始终检查来自scanf()的返回值。 -
如果用户仅输入
'\n',@gopiscanf("%[^\n]%*c",w)扫描 nothing。w仍未初始化,'\n仍保留在stdin中,可能会导致关注scanf()时出现类似问题。 -
@chux 我从不采用 scanf() 方式来读取字符串,如果 OP 已经采用了这条路径,我说这可以做到.. 请看看我在下面的回答,我说 @987654333 @很好
-
@Gopi 答案对用户
fgets()的建议很好,但上述评论和this answer 都建议使用当用户仅输入'\n'时无法正常工作的格式。scanf()的替代代码可以解决这个问题。
标签: c arrays string char scanf