2015-01-15 16 views
1

我创建了一个程序,它接收用户输入的字符。它会将该字母转换为大写字母并将其显示给最终用户。如何删除C程序中的重复输出?

但是,我收到一个问题,输出中出现了“请输入小写字符:”和下面的一行。我不太清楚是什么原因造成,但这里的节目,我到目前为止有:

#include <stdio.h> 
#include <stdbool.h> 
#include <ctype.h> 

// Converts lowercase letter to uppercase 

int main() 
{ 
    bool continue_program = true; 

    printf("Program Running \n"); 
    int lower, upper; 
    while (continue_program){ 
     printf("Please enter a character in lower case:"); 
     printf("\n"); 
     int lower = getchar(); 
     if(lower=='q' || lower=='Q'){ 
      printf("Goodbye \n"); 
      break; 
     } else { 
      upper = toupper(lower); 
      putchar(upper); 
      printf("\n"); 
     } 
    } 
    return 0; 
} 

输出例:

./a.out 
Program Running 
Please enter a character in lower case: 
a 
A 
Please enter a character in lower case: 


Please enter a character in lower case: 
b 
B 
Please enter a character in lower case: 


Please enter a character in lower case: 
p 
P 
Please enter a character in lower case: 


Please enter a character in lower case: 
Q 
Goodbye 
+0

张贴的码具有可变“下部”定义了两次,一次接近的节目的顶部,并再次在while循环的内部。建议只在'while'循环内引用变量,而不是再次定义它。 – user3629249

+1

代码需要使用用户输入所请求的char的换行符char。否则,通过第二次调用getchar()输入一个换行符并处理 – user3629249

+0

不相关,但为什么有一个continue_program变量,然后使用break来退出循环? – GrahamS

回答

2

只要改变这一点:

int lower, upper; 

到:

char lower, upper; 

和这个:

int lower = getchar(); 

到:

scanf(" %c", &lower); 
    //^ Space which 'eats' remaning '\n' in the buffer 
+0

getchar()返回一个int值,以便部分代码是正确的。这似乎错过了变量'lower'被定义两次的事实。 – user3629249