[英]scanf three times in c doesn`t work?
您好,我有一个学校的作业,正在编写一个程序,该程序可以找到一个单词并将其替换为文本中的另一个单词。 到目前为止,我还没有完成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只是跳过,我将非常感激。
对不起,英语不好,不是我的母语。
尝试这个
printf("Text: ");scanf("%[^\n]%*c",w);
printf("\nFind: ");scanf("%[^\n]%*c", find);
printf("\nReplace: ");scanf("%[^\n]%*c", replace);
只需使用换行符并在[^\\n]
之后删除s
,它表示
阅读直到遇到换行符
我建议你用
fgets(w,sizeof(w),stdin);
这更安全。
这应该起作用,因为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);
scanf("%[^\\n]s",w);
有多个问题:
没有必要为s
。 "%[^\\n]"
是完整的格式说明符。 @放松
没有输入限制。 可以用来应付限制: char w[10000]; scanf("%9999[^\\n]", w);
char w[10000]; scanf("%9999[^\\n]", w);
格式不消耗任何东西,只要用户输入Enter即可 。 w
保持未初始化, '\\n'
保留在下一个执行相同操作的下一个scanf()
stdin
中。
// 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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.