C语言中gets()跟scanf()的问题

我把scanf("%s",str);getchar();改成gets(str)之后 ,程序就能正常运行。为什么?如果要用scanf()函数 那么应该怎么改才能正常运行。这个代码可以正常编译 但是不能正常运行。 为啥? 有人可以解答吗 谢谢你们

俺输入了 i love china! 然后他就没反应 然后退出了

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
    {
        FILE *fp;
        char str[100];
        int i=0;
        if((fp=fopen("b1","w"))==NULL)
            {
                printf("error!");
                exit(0);
            }
        printf("Please input a string :\n");
        gets(str);
        while(str[i]!='!')
            {
                if(str[i]<='z'&&str[i]>='a')
                     str[i]= str[i]-32;
                fputc(str[i],fp);
                i++;
                    
            }
        fclose(fp);
        fopen("b1","r");
        fgets(str,strlen(str)+1,fp);
        printf("%s\n",str);
        fclose(fp);
        return 0;

    }
阅读 2.2k
1 个回答

scanf 适合解析“已知格式”的字符串。

以输入字符串 i love china! 为例

  1. scanf("%s", str) 出错,因为只取了空格前的 i
  2. scanf("%99c", str) 可以,str变量存储了整个字符串。
  3. scanf("%9s %9s %9s", str, str+10, str+20) 可以

    str -> "i"
    str+10 -> "love"
    str+20 -> "china!"

参考

https://linux.die.net/man/3/s...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进