C程序在输入大写字母时会跳过行?

时间:2017-06-24 17:26:35

标签: c

所以当我输入"是"对于第一个问题,它会提示这是什么样的经销商。只有输入非大写字母,我才能正确地运行整个程序,提示所有printf语句。例如:

Yes  
bartow ford  
wash  
brian cox  
ford explorer (if i input 2001 ford explorer it skips the next two printf statements idk why)

etc. etc.

但如果我使用诸如

之类的大写字母
Bartow Ford.

它跳过printf。它需要什么类型的工作? 我理解一些上下文很差但我首先担心结构,然后回去制作语言"漂亮" 我的想法是允许用户输入汽车来自哪个经销商,从需要做什么到汽车,车主,制作模型等等,然后输入任何其他信息。然后将其保存到桌面上的单独文件中。 非常感谢你们的任何信息!

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

#define WASH 20
#define WAX 30
#define FULL 100
#define MINI 40
#define TINT 60

int main() {

    int exit;

    char type[40];
    char car[40];
    char name[40];
    char work[40];
    char dealer[40];
    char comments[200];

    float total;

    FILE *elite;

    elite = fopen("/Users/BlakePatterson/Desktop/Elite Detail/Customer.txt", "w");

    printf(".\nIs this a dealer car or is this a customer car?.\n");
    scanf("%s", type);

    if (strcmp(type, "Yes") == 0) {

        printf("What is the name of the dealership?.\n");
        scanf(" %s", dealer);

        printf("What type of work needs to be done to the car?\n\n 1.Wash.\n2.Wax.\n");
        scanf("  %s", work);

        printf("Please input the name of the person handling the car.\n");
        scanf("   %s", name);

        printf("Please input the make, model, year and condition of the car upon arrival.\n");
        scanf("    %s", car);

        printf("Do you need to make any more commentd?.\n");
        scanf("     %s", comments);

        printf("Are you finished? if so press 2 if not press 1.\n");
        scanf("%d", &exit);
    }

    fprintf(elite,"%s%s%s%s%s", dealer, work, name, car, comments);
    fclose(elite);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您观察到的行为与大写字母无关,而是与多个单词的答案无关。您无法使用scanf(" %s", dealer);阅读多个字词。初始空间是多余的,因为%s会跳过任何前导空格并将单个单词读入目标数组。后续调用scanf()将读取以下字词作为其他问题的答案。

您可以使用fgets(dealer, sizeof dealer, stdin)并删除尾随换行符,也可以使用scanf(" %39[^\n]", dealer);在同一行读取多个单词,最多39个字节。对于其他输入线也是如此,根据不同的阵列大小进行调整。