我正在编写一个代码,根据用户的选择将输入行更改为大写/小写。这是我的代码:
#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语句。有帮助吗?
答案 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){