我正在创建一个简单的系统供人们输入基本的详细信息,将它们打印在屏幕上,一旦确认写入文本文件,用户输入编辑的信息是错误的,然后循环回到开头的报告,如果输入另一个输入,它会再次询问问题。我正在努力让打印文件工作和两个结束循环。
#include <stdio.h>
#include <string.h>
int get_line(const char *prompt, char *dest, size_t size) {
printf("%s", prompt);
fflush(stdout);
if (fgets(dest, size, stdin) == NULL) {
dest[0] = '\0';
return 0;
}
dest[strcspn(dest, "\n")] = '\0'; // Lop off potential trailing '\n'
return 1;
}
int main(void)
{
char first_name[20], surname[20], street_no[10], street_name[40], postcode[10], contact_no[20], save_edit_qu[10];
int dd, mm, yy;
get_line(" Enter first name:\n", first_name, sizeof first_name);
get_line(" Enter surname:\n", surname, sizeof surname);
get_line(" Contact Number\n", contact_no, sizeof contact_no);
get_line(" Street Number\n", street_no, sizeof street_no);
get_line(" Street Name\n", street_name, sizeof street_name);
get_line(" Postcode\n", postcode, sizeof postcode);
printf(" First Name : %s\n", first_name);
printf(" Surname : %s\n", surname);
printf(" Contact No.: %s\n", contact_no);
printf(" Street No. : %s\n", street_no);
printf(" Stret Name : %s\n", street_name);
printf(" Postcode : %s\n", postcode);
get_line(" If the informations above is correct please enter SAVE/if you wish to change any informations please enter edit", save_edit_qu, sizeof save_edit_qu);
if (save_edit_qu[0] == 'SAVE' || save_edit_qu[0] == 'save') {
//write info to file
}
if (save_edit_qu[0] == 'EDIT' || save_edit_qu[0] == 'edit') {
//loop back to beginning of report
}
else if ()//loop to beginning of SAVE/EDIT QU
return 0;
}
答案 0 :(得分:1)
使用strcmp()并使用双引号“”表示字符串!
if (strcmp(save_edit_qu,"SAVE") == 0 || strcmp(save_edit_qu,"save") == 0) {
或仅使用单引号测试第一个字符
if (save_edit_qu[0] == 'S' || save_edit_qu[0] == 's') {
答案 1 :(得分:0)
所以,你的程序有一些问题。在我向您展示更改之前,我会尝试在这里完成所有工作。
您的字符串比较简单无意义:save_edit_qu[0] == 'SAVE'
只是将save_edit_qu
的第一个字符/字节与'SAVE'
进行比较,strcmp
本身不是正确的字符串文字。你必须将字符串文字用C语言中的双引号括起来。即使你在这里这样做,将字符与字符串进行比较也没有意义。您应该使用string.h
中的strcmp(a,b) == 0
为您进行比较。我把它放在我的程序的固定版本中。如果字符串a
等于字符串b
,则格式为:do {
// collect data.
} while (!done);
。
您可以让用户编辑所有输入数据。因此,您应该将数据集合放在循环中。这使您可以在用户未完成的情况下不断重新收集数据。
do {
// collect data
do {
// save or edit
} while (!validChoice);
} while (!done);
最后,您让用户在数据收集循环中执行操作,以便他们可以选择他们想要对数据执行的操作。他们可以编辑或保存。他们也没有进入这种情况。在这种情况下,他们会再次被提示。这保证了内部的另一个控制回路。
#include <stdio.h>
#include <string.h>
int get_line(const char *prompt, char *dest, size_t size) {
printf("%s", prompt);
fflush(stdout);
if (fgets(dest, size, stdin) == NULL) {
dest[0] = '\0';
return 0;
}
dest[strcspn(dest, "\n")] = '\0'; // Lop off potential trailing '\n'
return 1;
}
int main(void)
{
char first_name[20], surname[20], street_no[10], street_name[40], postcode[10], contact_no[20], save_edit_qu[10];
int dd, mm, yy, done = 0;
// Data collection loop: Runs as long as the user opts to edit the data.
do {
// Fetch data.
get_line(" Enter first name:\n", first_name, sizeof first_name);
get_line(" Enter surname:\n", surname, sizeof surname);
get_line(" Contact Number\n", contact_no, sizeof contact_no);
get_line(" Street Number\n", street_no, sizeof street_no);
get_line(" Street Name\n", street_name, sizeof street_name);
get_line(" Postcode\n", postcode, sizeof postcode);
printf(" First Name : %s\n", first_name);
printf(" Surname : %s\n", surname);
printf(" Contact No.: %s\n", contact_no);
printf(" Street No. : %s\n", street_no);
printf(" Stret Name : %s\n", street_name);
printf(" Postcode : %s\n", postcode);
// Action loop: Runs as long as no valid input is given.
do {
get_line(" If the informations above is correct please enter SAVE/if you wish to change any informations please enter edit\n", save_edit_qu, sizeof save_edit_qu);
// Option to quit.
if (strcmp(save_edit_qu, "SAVE") == 0 || strcmp(save_edit_qu, "save") == 0) {
fprintf(stdout, "Writing data to file...\n");
// write data here.
// Set done flag, and exit action loop.
done = 1;
break;
}
// Option to edit.
if (strcmp(save_edit_qu, "EDIT") == 0 || strcmp(save_edit_qu, "edit") == 0 ) {
//loop back to beginning of report
break;
}
// Otherwise ask prompt again ^.
} while (1);
} while (!done);
return 0;
}
有了这个说,这是工作计划。我没有为你实现写入文件部分。我想你自己可以试一试!
if(typeOfVariable === 'string')