gpt4 book ai didi

关于 gets() 和 scanf() 的 C 问题

转载 作者:行者123 更新时间:2023-11-30 19:00:22 26 4
gpt4 key购买 nike

此代码无法正常工作。但将 scanf("%s",str);getchar(); 替换为 gets() 后,代码可以正常工作。我不知道出了什么问题。该代码可以编译,但无法正常工作。如果我不使用 gets() 而使用 scanf() 该怎么办?

#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) //open file
{
printf("error!");
exit(0);
}
printf("Please input a string :\n");
scanf("%s",str);
getchar();
while(str[i]!='!') //LOWWER CASE TO UPPER CASE
{
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;
}

最佳答案

gets() 读取输入直到换行或 EOF,而 scanf() 读取输入直到空白、换行或 EOF。

如果你想使用scanf(),那么语句应该像这样:

scanf("%[^\n]s",str);

但是使用 fgets() 或 gets() 比 scanf() 更安全。

关于关于 gets() 和 scanf() 的 C 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59942337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com