扫描三次在c不起作用?

时间:2015-02-26 10:35:53

标签: c arrays string char scanf

你好,我从学校做了一个家庭作业,制作一个程序,找到一个单词并用文本替换另一个单词。直到现在我还没有完成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只是跳过,我会非常感激。

抱歉英语不好而不是我的母语。

3 个答案:

答案 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);有多个问题:

  1. 不需要s"%[^\n]"是一个完整的格式说明符。 @unwind

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

  3. 格式不消耗任何用户输入 Enter w保持未初始化状态,'\n'仍保留在stdin,以便下一个scanf()执行同样的操作。

    // 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);
    
  5. 建议fgets()

    char w[10000];
    if (fgets(w, sizeof w, stdin) == NULL) Handle_EOForIOError();
    // strip possible ending EOL if needed.
    w[strcspn(w, "\n")] = 0;