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

标签 c

因此,当我运行程序时,如果我为第一个问题输入"is",它会提示这是哪种经销商。只有当我输入非大写字母时,我才能正确地运行整个程序并提示所有 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;
}

最佳答案

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

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

关于C程序在输入大写字母时跳行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44739074/

相关文章:

c - 普通 C 的可增长缓冲区

c - Unix - 从子阻塞排序

c - 在C中,函数是在第一次调用时加载到内存中还是在程序启动时加载到内存中?它可以从内存中卸载吗?

c - 是 unsigned char a[4][5]; [1][7];未定义的行为?

objective-c - isEqualToString 与 ==

C - 扫描矩阵数组并将其发送到函数?

C - strcmp 的段错误?

c - 带有源列表的 MPI_Recv

c - 为什么 TAILQ_INSERT_* 宏需要将条目绑定(bind)到变量?

c++ - 下面代码的算法复杂度是多少