C - scanf无法使用switch语句

时间:2017-01-12 20:30:12

标签: c scanf

我正在编写一个代码,根据用户的选择将输入行更改为大写/小写。这是我的代码:

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

main(){
    char line[20];
    char sign;
    int i =0;
    printf("Write your line:\n");
    scanf("%99[^\n]", &line);
    printf("Choose U or L:\n");
    scanf("%c", &sign);
    switch(sign){
    case 'U':
        for(i = 0; i <strlen(line); i++){
        printf("%c",toupper(line[i]));}
        break;
    case 'L':
        for(i = 0; i <strlen(line); i++){
        printf("%c",tolower(line[i]));}
        break;
    default:
        break;
    }
    return 0;
}
如果我指定代码中的符号,

Switch语句就可以了。然而,当我尝试运行它时,它让我输入行,打印下一个问题,并且在不让我输入选择字母的情况下终止。我究竟做错了什么?我已经尝试过scanf语句,这似乎是问题,好像程序不能一个接一个地执行两个scanf语句。有帮助吗?

1 个答案:

答案 0 :(得分:1)

您正尝试将scanf的输入存储到数组&#39; line&#39;它被定义为只有20个元素。但是你接受来自scanf的99个字符。您需要修复这两个中的一个。另外,请确保在数组大小中考虑\0

另外,您遇到的另一个问题是您在不清除输入缓冲区的情况下使用多个scanf语句。因此,在第一个scanf上输入的ENTER键保留在缓冲区中,并由第二个扫描消耗。您可以使用getchar进行第二次阅读:

printf("Write your line:\n");
scanf("%99[^\n]", &line);
while((sign = getchar()) != 'U' && sign != 'L') {
    printf("Choose U or L:\n");

} 
//scanf(" %c", &sign);
switch(sign){