我编辑了我的代码是因为担心与我相同课程的人会复制我的代码并将其交给我。感谢你给我的答案,这是一个很大的帮助。
我的程序应该允许我将新项目及其名称,价格和数量添加到系统中。 但在执行期间,我的代码似乎损坏了文件。我不知道什么是错的,不想写更复杂的代码。 程序只是跳过数量并返回菜单。不允许我输入数量。
#include <stdlib.h>
#include <string,h>
struct Item//declaring a structure
{
char code[25];//variables inside a structure
char name[25];
double price;
int quantity;
};
int main (void)
{
struct Item item;
FILE *fgst;
printf("-------------------------------\n");
printf(" ADD PRODUCT\n");
printf("-------------------------------\n");
fgst = fopen("gst.txt", "r");
if(fgst==NULL)
{
printf("File cannot be found\n");
}
else //else statement
{
printf("Add Code:\n");
scanf("%s", item.code);
printf("name:\n");
scanf("%s", item.name);
printf("price:\n");
scanf("%.2f",&item.price);
printf("quantity:\n");
scanf("%d", &item.quantity);
fprintf(fgst,"%s;%s;%.2f;%d\n",item.code,item.name,item.price,item.quantity);
fclose(fgst);
}//end else statement
break;
}
其中一个文件的内容如下:
AS520; Jelly tartar; 5.35; 42
答案 0 :(得分:0)
来自man scanf
:
scanf()系列函数根据格式扫描输入,如下所述。此格式可能包含转换规范;此类转换的结果(如果有)存储在格式为指针参数指向的位置。
以下陈述是错误的:
scanf("%.2f",product.price);
scanf("%d", product.quantity);
他们应该有以下形式:
scanf("%.2f",&(product.price));
scanf("%d", &(product.quantity));
答案 1 :(得分:0)
您的程序因以下行而崩溃:
scanf("%.2f",product.price);
scanf("%d", product.quantity);
scanf需要一个指针,但是你提供了一个double和一个整数。将这些行更改为:
scanf("%.2f",&product.price);
scanf("%d", &product.quantity);
它不会崩溃。此外,您正在尝试更新文件,但是您将其打开为只读:
fopen("gst.txt", "r");
如果要写入文件,则应使用:
fopen("gst.txt", "ra");
答案 2 :(得分:0)
我已修复您的细分错误并测试了您的程序。您的func transitionBetweenTwoViews(subViewNew: UIViewController){
//Add new view
addChildViewController(subViewNew)
subViewNew.view.frame = (self.parentViewController?.view.frame)!
view.addSubview(subViewNew.view)
subViewNew.didMoveToParentViewController(self)
//Remove old view
if self.childViewControllers.count > 1 {
//Remove old view
let oldViewController: UIViewController = self.childViewControllers.first!
oldViewController.willMoveToParentViewController(nil)
oldViewController.view.removeFromSuperview()
oldViewController.removeFromParentViewController()
}
print("After Remove: \(self.childViewControllers.description)")
}
用法是问题的根源。
scanf
答案 3 :(得分:0)
代码的主要问题是它以读取模式打开文件,然后尝试写入它。要将数据附加到文件,请使用追加模式("a"
)。