你好,我从学校做了一个家庭作业,制作一个程序,找到一个单词并用文本替换另一个单词。直到现在我还没有完成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 for find and replace只是跳过,我会非常感激。
抱歉英语不好而不是我的母语。
答案 0 :(得分:1)
试试这个
printf("Text: ");scanf("%[^\n]%*c",w);
printf("\nFind: ");scanf("%[^\n]%*c", find);
printf("\nReplace: ");scanf("%[^\n]%*c", replace);
只需使用换行符并在s
之后删除[^\n]
读取直到遇到换行符
我建议你使用
fgets(w,sizeof(w),stdin);
更安全。
答案 1 :(得分:0)
这应该有效,因为scanf应该跳过前导空格,包括换行符。
char w[10000];
char find[10000];
char replace[10000];
/* ... */
printf("Text: ");scanf("%s",w);
printf("\nFind: ");scanf("%s", find);
printf("\nReplace: ");scanf("%s", replace);
答案 2 :(得分:0)
scanf("%[^\n]s",w);
有多个问题:
不需要s
。 "%[^\n]"
是一个完整的格式说明符。 @unwind
没有输入限制。可以用来处理限制:char w[10000]; scanf("%9999[^\n]", w);
格式不消耗任何用户输入 Enter 。 w
保持未初始化状态,'\n'
仍保留在stdin
,以便下一个scanf()
执行同样的操作。
// NOT recommended
scanf("%[^\n]%*c", w); This gets stuck on \n only input
scanf("%[^\n]",w);
中的任何内容都不会消耗典型的尾随'\n'
。代码可以使用以下内容来检查scanf()
结果。
if (scanf("%9999[^\n]", w) != 1) Handle_EOForEOLonlyInput();
fgetc(stdin);
建议fgets()
char w[10000];
if (fgets(w, sizeof w, stdin) == NULL) Handle_EOForIOError();
// strip possible ending EOL if needed.
w[strcspn(w, "\n")] = 0;