【发布时间】:2015-11-16 16:24:12
【问题描述】:
我是 C 编程新手。 我很好奇我学到了多少 C. 因此,我想创建一个程序,在其中我可以简单地创建一个文件并在其中写入。 我想,文件名应该少于 100 个字符。但不管是字符串还是一个单词还是一个字母。 我无法完成,因为我被困在如何输入文件名的字符串(例如,Project work、New Doc1 等)的事实上
所以我写了这个;
int main()
{
int a = 0;
while(a != 5)
{
puts("Put a number: ");
scanf("%i", &a);
if(a == 1)
{
char name[30];
printf("Put a name: ->>");
for(int i = 0;i < 31 && name[i] != '\n';i++)
{
name[i] = getchar();
}
char ex[50] = ".txt";
strcat(name,ex);
printf("%s",name);
}
}
return 0;
}
问题是在输入名称时,它不会在下一个停止(当我按下回车键时),而且它也没有打印正确的文件名。
【问题讨论】:
-
在将换行符写入
name[i]后增加 i,因此条件不会检查您想要的值。 -
这是一个非常常见的问题——将
scanf()与其他 I/O 原语混合。 'number' 输入在输入缓冲区中留下一个换行符,因此在for循环中读取的第一个字符是一个换行符。在您输入任何内容之前,您还将name[0]与换行符进行比较——这是个坏主意(未定义的行为)。下一次循环时,您将再次尝试将未初始化的字符与换行符进行比较;仍然不是幸福的秘诀。此外,您的数组大小为 30,但您正在针对 31 进行测试;最终会遇到更多麻烦,但您需要先解决其他问题。 -
所以您必须使用
getchar()来实现您的教育目标?使用if (scanf("%25s", name) != 1) break;会简单得多。您最多需要允许 25 个用户输入的字符,因为您要附加.txt并且还需要一个空终止符(因此必须在字符串中保留 5 个位置)。 -
@cdonts 在需要时声明变量。
-
@chux 我会考虑到这一点。感谢您的提示
标签: c