gpt4 book ai didi

c - 我的案例 2 似乎没有在 C 编程中读取我的 .txt 文件

转载 作者:行者123 更新时间:2023-11-30 19:37:13 27 4
gpt4 key购买 nike

我一直在为我的工作开发这个程序,我正在尝试列出工具 list 。我对编程非常陌生,如果有替代方案可以解决这个问题,我愿意研究它。

我的第一个案例成功了。它所做的只是询问用户名称、部件号 (P/N) 和序列号 (S/N)。

第二种情况我试图让它打印数据列表。

我的目标是解决第二种情况的问题

#include<stdio.h>
#include<stdlib.h>

main()
{
FILE * fp;
int qty;
int menu;
char nomen[26];
char pN[26];
char ans;
//Test to see if file exist
fp = fopen("Metro Inventory.txt", "w");
if (fp == NULL)
{
printf("*Error opening file*");
fprintf(fp,"*Error opening file*");
exit(1);
}
//Intro Header
fprintf(fp,"List of Special Tools:");
fprintf(fp,"\t\t\tPart Number:");
fprintf(fp,"\t\t Quantity:\n\n");

printf("Metro Aviation Tools List\n\n");
printf("What would you like to do?\n");
scanf("%d", &menu);
//loop of switch asking for nomenclature
do
{
switch (menu)
{ //Case 1 adds new content
case(1):
{
printf("Enter Nomenclature(no spaces):\n");
scanf("%s", nomen);
fputs(nomen, fp);
fputs("\t\t\t",fp);

//Part Number

printf("What is the part number?\n");
scanf("%s", pN);
fputs(pN, fp);
fputs("\t\t\t", fp);
//Quantity
printf("What is the quantity?\n");
scanf("%d", &qty);
fprintf(fp,"%d",qty);
fputs("\n", fp);
break;
fclose(fp);
}// Case 2 Edits content
case(2):
{

int c;

fp = fopen("Metro Inventory.txt", "r");
if (fp)
{
while ((c = getc(fp)) != EOF)
putchar(c);
fclose(fp);
}

fclose(fp);
break;
}
default : printf("Thank you");
break;
}//end switch
printf("To add tool type Y.\n To exit type N.\n");
getch();
scanf("\n%c", &ans);
//loop
}
while ((ans == 'Y')||(ans == 'y'));
if ((ans == 'N')||(ans=='n'));
{
exit(1);

}

获取();

返回0;}

最佳答案

我已经很长时间没有为C做过文件I/O了,但是,快速浏览一下你的程序就会发现,你设置/修改菜单值的时间是在第26/27行。然后,循环从第 29 行开始。之后,没有任何指令来设置/修改菜单值。

稍后在第 73 行到第 75 行,您在循环范围结束之前要求输入。该输入仅稍后在另一个循环中使用。我建议您删除整个 switch case 结构,并允许程序开始继续执行您想做的任何操作。因为也没有任何解释为什么用户应该选择 1 作为菜单或 2。

编辑

看来您不理解我最初的评论,因此我冒昧地更改了您的代码的某些部分。

已完成更改:

  1. Main() - 对于 C 编程,它必须具有程序入口点的类型。要么为空,要么为整数。如果您执行int main(),请确保将return 0;放在最后一个大括号之前。为了清楚起见,请查看下面修改后的代码。
  2. 菜单输入应该发生的代码位置。我将其放置在循环中,以便每次循环重新启动时都会提示用户。

In my initial answer or comment, I've said that in your original code, the point where you modify your variable required for the switch case to work only once and it happens before the loop.

You must think from 1 line to another. What happens at line 1. How does line 1 affect line 2. In this example of yours, at line 26/27, you've set the value of menu to which ever input by the user (input validation is another topic). At that point, it is still linear, nothing loops so it means that your from the point you set the menu (line 26/27) to the point where the program exits (or ends) the value of menu remains static, unchanged.

  • 删除 exit(1); 我假设您希望在 fp 返回 null 和/或用户为 ans< 选择其他输入时结束程序。我所做的下一次修改解决了退出点的问题(请参阅第 4 项)。
  • 重新排列了代码,以便新代码中的 else 部分(请参阅第 20 行)if (fp != null) 程序将允许写入文件。如果 fp 返回 null,整个程序将退出并返回 return 0;

  • 修改后的代码

    #include<stdio.h>
    #include<stdlib.h>

    int main()
    {
    FILE * fp;
    int qty;
    int menu;
    char nomen[26];
    char pN[26];
    char ans;
    //Test to see if file exist
    fp = fopen("Metro Inventory.txt", "w");
    if (fp == NULL)
    {
    printf("*Error opening file*");
    fprintf(fp,"*Error opening file*");

    }
    else
    {
    //Intro Header
    fprintf(fp,"List of Special Tools:");
    fprintf(fp,"\t\t\tPart Number:");
    fprintf(fp,"\t\t Quantity:\n\n");

    do
    {
    printf("Metro Aviation Tools List\n\n");
    printf("What would you like to do?\n");
    scanf("%d", &menu);
    //loop of switch asking for nomenclature

    switch (menu)
    { //Case 1 adds new content
    case(1):
    {
    printf("Enter Nomenclature(no spaces):\n");
    scanf("%s", nomen);
    fputs(nomen, fp);
    fputs("\t\t\t",fp);

    //Part Number

    printf("What is the part number?\n");
    scanf("%s", pN);
    fputs(pN, fp);
    fputs("\t\t\t", fp);
    //Quantity
    printf("What is the quantity?\n");
    scanf("%d", &qty);
    fprintf(fp,"%d",qty);
    fputs("\n", fp);
    break;
    fclose(fp);
    }
    // Case 2 Edits content
    case(2):
    {
    int c;

    fp = fopen("Metro Inventory.txt", "r");

    if (fp)
    {
    while ((c = getc(fp)) != EOF)
    putchar(c);

    fclose(fp);
    }
    fclose(fp);
    break;
    }

    default :
    printf("Thank you");
    break;
    }//end switch
    printf("To add tool type Y.\n To exit type N.\n");
    getch();
    scanf("\n%c", &ans);

    //loop
    }while ((ans == 'Y')||(ans == 'y'));
    }

    return 0;
    }

    关于c - 我的案例 2 似乎没有在 C 编程中读取我的 .txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40164061/

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