gpt4 book ai didi

c - 用户输入中断 while 循环以返回主程序

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

因此,如果用户输入是 C,我需要中断循环,但它不会中断循环并返回到主函数。

它坚持同一个循环。

void createFile(void)
{
FILE *NewFile;
char *file_name = malloc(sizeof(*file_name));
printf("\nEnter a name of the file you want to create:\n");
scanf("%s",file_name);

while(access(file_name, 0) != -1)//in case the file exists
{
printf("\n%s file already exists\nplease re_enter your file name or C to go back to the main menu.\n\n", file_name);
scanf("%s", file_name);
if ( file_name == 'C')
{
return;// returning to the main menu
}
}
if(access(file_name, 0) == -1)//if it does not exist
{
NewFile = fopen(file_name,"w+");
fclose(NewFile);
printf("\nFile has been created successfully! :D\n\nPlease enter R to return to the main menu ");
scanf("%s",file_name);
if (file_name == 'R')
{
return;
}
}
remove("C"); // just in case unwanted C file is created.
remove("R");
}

最佳答案

file_name 是指向字符的指针。 (它实际上是一个指向以 NUL 结尾的字符序列的第一个字符的指针,但它仍然是一个指向字符的指针。)这从声明中可以明显看出:

char *file_name;

另一方面,'C' 是一个整数。最有可能的是整数 67,这是字母 C 的 ascii 代码。

因此,您正在将指针(即地址)与整数进行比较。

在 C 中这实际上是合法的,但只有当您与指针进行比较的整数为 0 时才有意义。因此您的编译器应该对此发出警告。

最终结果是比较 file_name == 'C' 的计算结果为 0 (false)。

您想要做的是将 file_name 指向的字符串与字符串文字 "C" 进行比较,具体操作如下:

if (strcmp(file_name, "C") == 0))

strcmp 是一个标准库函数,它比较两个字符串(给定指向其各自初始字符的指针),如果第一个字符串在前(按字母顺序),则返回一个负整数,如果第一个字符串在前(按字母顺序),则返回一个正整数。第二个在前,如果两个字符串相等则为 0。

关于c - 用户输入中断 while 循环以返回主程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30249995/

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