繁体   English   中英

在C中扫描3次不起作用?

[英]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); 有多个问题:

  1. 没有必要为s "%[^\\n]"是完整的格式说明符。 @放松

  2. 没有输入限制。 可以用来应付限制: char w[10000]; scanf("%9999[^\\n]", w); char w[10000]; scanf("%9999[^\\n]", w);

  3. 格式不消耗任何东西,只要用户输入Enter即可 w保持未初始化, '\\n'保留在下一个执行相同操作的下一个scanf() stdin中。

     // NOT recommended scanf("%[^\\n]%*c", w); This gets stuck on \\n only input 
  4. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM