輕鬆進入程序分割錯誤,C文件處理程序
使用Linux首先的。我試圖製作一個程序,如果他沒有獲得賬戶,他將首先註冊一個用戶,然後他將被導向登錄屏幕,在那裏他將輸入他的賬戶信息,然後登錄。之後,他將提供選項以方便訪問網站等就像用戶輸入1一樣,他將被引導到f.b,2被引導到quora等等。我成功地設法編寫了程序到登錄階段,但是我在一個單一的函數中完成了它,例如main(),所以我認爲如果我有用於執行特定任務的單獨函數會很好。我這次用單獨的函數對它進行了編碼,但是當我嘗試使用fopen()打開文件時,這次我得到了分段錯誤。還請告訴我一些使用控制檯命令在瀏覽器中打開網站的方法。就像我們在Windows中一樣(例如,開始www.facebook.com)。這是代碼。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct user_data {
char name[50];
unsigned long password;
};
struct user_data new_user; // Will hold the data of new
struct user_data data_ver; // Will hold the data read
void sign_up(void);
void sign_in(void);
int main(void) {
beginning: // Beginning label in case of invalid input
printf("\t\t\t\t WELCOME TO EASY ACCESS APPLICATION");
printf("\n\n\nIf you have an account press 1.\n\nPress 2 for sign up.");
char user_choice; // Wil hold the
// user_choice i.e whether he wants to sign up/sign in
user_choice = getchar();
if (user_choice == '1') {
sign_in(); // In case of 1 goto sign in page
}
else if (user_choice == '2') {
sign_up(); // Opening file);
// In case of 2 goto sign up page
}
else {
printf("Invalid input. Try again.\n\n");
puts("Press any key to continue...");
getchar();
system("clear");
goto beginning;
}
return 0;
}
void sign_up(void) {
FILE *data = fopen("data.txt", "a");
if (data == NULL) {
printf("Unable to open file.");
scanf("%c");
system("clear");
}
system("clear");
printf("\t\t----------------------------\n"
"\t\t| |\n"
"\t\t| SIGN UP PAGE |\n"
"\t\t| |\n"
"\t\t----------------------------");
printf("\n\nName:");
scanf("%c"); // Dummy scanf
gets(new_user.name); // Getting name into the struct
printf("\nPassword.");
scanf("%lu", &new_user.password); // Getting pass into the struct
fprintf(data, "%s %lu\n", new_user.name, new_user.password); //Feeding data into FILE
system("clear");
printf("\n\nSign up complete. :) ");
printf("\n\nYou will now be directed to the sign in page. ");
printf("\nPress any key to contine...");
scanf("%c");
system("clear");
fclose(data);
}
void sign_in(void) {
}
我得到了sign_up函數第一行的錯誤信息,我打開了FILE。
這個'scanf(「%c」);'不是你的想法。你想在哪裏存儲讀取的字符? –
@SeekAddo嗯,它是一個虛擬scanf()。我將它用作gethc()函數。 – Muneeb
@SeekAdoo順便說一句,它不會存儲任何被折磨的字符(如果我沒有錯),因爲我沒有指定它的位置 – Muneeb