写入文件并使用带有循环的if语句

时间:2018-04-27 11:25:35

标签: c file loops if-statement

我正在创建一个简单的系统供人们输入基本的详细信息,将它们打印在屏幕上,一旦确认写入文本文件,用户输入编辑的信息是错误的,然后循环回到开头的报告,如果输入另一个输入,它会再次询问问题。我正在努力让打印文件工作和两个结束循环。

#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;
}

2 个答案:

答案 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)

所以,你的程序有一些问题。在我向您展示更改之前,我会尝试在这里完成所有工作。

  1. 您的字符串比较简单无意义:save_edit_qu[0] == 'SAVE'只是将save_edit_qu的第一个字符/字节与'SAVE'进行比较,strcmp本身不是正确的字符串文字。你必须将字符串文字用C语言中的双引号括起来。即使你在这里这样做,将字符与字符串进行比较也没有意义。您应该使用string.h中的strcmp(a,b) == 0为您进行比较。我把它放在我的程序的固定版本中。如果字符串a等于字符串b,则格式为:do { // collect data. } while (!done);

  2. 您可以让用户编辑所有输入数据。因此,您应该将数据集合放在循环中。这使您可以在用户未完成的情况下不断重新收集数据。

    do { // collect data do { // save or edit } while (!validChoice); } while (!done);

  3. 最后,您让用户在数据收集循环中执行操作,以便他们可以选择他们想要对数据执行的操作。他们可以编辑或保存。他们也没有进入这种情况。在这种情况下,他们会再次被提示。这保证了内部的另一个控制回路。

    #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;
    }
    
  4. 有了这个说,这是工作计划。我没有为你实现写入文件部分。我想你自己可以试一试!

    if(typeOfVariable === 'string')