gpt4 book ai didi

c - 在 while 循环中使用 scanf 查找 char 数组

转载 作者:行者123 更新时间:2023-11-30 15:17:40 24 4
gpt4 key购买 nike

我是 C 编程新手。我很好奇我学到了多少 C。因此,我想到创建一个程序,在其中我可以简单地创建一个文件并在其中写入。我认为文件名应该少于 100 个字符。但它是一个字符串、一个单词还是一个字母并不重要。我无法完成,因为我陷入了如何输入文件名字符串(例如,项目工作、新文档1等)的事实

所以我写了这个;

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;
}

问题是在输入名称时,它不会停在下一个(当我按 Enter 时),而且它也没有打印正确的文件名。

最佳答案

你的方法有很多问题。

  1. 将 scanf 与其他输入基元混合使用并不好,您必须清除所有剩余字符中的 stdin。
  2. 任何字符串都必须以“\0”结尾才能将该字符串标记为完整。所以你必须为这个角色预留空间。
  3. 连接时必须遵守字符串的限制。
  4. 如果使用 printf,字符串只会在刷新标准输出后显示(当您将 '\n' 放在字符串末尾时,刷新完成)

试试这个:

#include <stdio.h>
#include <string.h>

int main()
{

int a = 0;

while(a != 5)
{
int ch;
puts("Put a number: ");
scanf("%d", &a);
/* flush any remaining characters */
while ((ch=getchar()) != EOF && ch != '\n'); /* issue 1 */
if(a == 1)
{
int i = 0;
char name[30];
printf("Put a name: ->>");
fflush(stdout); /* issue 4 */

while ((ch=getchar()) != EOF && ch != '\n' && i < 25) /* issue 3 */
name[i++] = ch;
name[i] = '\0'; /* issue 2 */

/* flush any remaining characters [if input > 25 chars] */
if (ch != EOF && ch != '\n') while ((ch=getchar()) != EOF && ch != '\n');

char ex[50] = ".txt";

strcat(name,ex); /* issue 3 */
printf("%s\n",name);

}
}

return 0;
}

另外,考虑使用getlineatoi而不是getcharscanf

关于c - 在 while 循环中使用 scanf 查找 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32162087/

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