这是我的代码!(抱歉我的英语不好)
#include<stdio.h>
int convert(char ch);
int main(void)
{
char ch=0;
while(ch != 'q')
{
ch=getchar();
ch=convert(ch);
if(ch == -1)
printf("wrong input");
else
putchar(ch);
putchar('\n');
}
return 0;
}
int convert(char ch)
{
if(ch>='A' && ch<='Z')
ch+=32;
else if(ch>='a' && ch<='z')
ch-=32;
else
return -1;
}
此代码用于将A更改为a,z更改为Z. 将小额转换为资本市场,或者反转。
但是一旦完成,我发现了一些奇怪的东西,每当我把一个字符放入程序时,
它总是返回我预期的结果和另一个“错误的输入”。 除了一个字符和一个Enter,我没有把任何东西放到我的标准输入上。
所以,这是我的问题。
函数getchar()或其他类似fgetc,fgets接收'enter'作为字符?
答案 0 :(得分:1)
这里有一些example code可以帮助您了解更多getchar
。
另外,我认为您需要将else
子句放在括号中。
改变这个:
else
putchar(ch);
putchar('\n');
到此:
else
{
putchar(ch);
putchar('\n');
}
在C / C ++中,只有第一行代码会在if/else
块中执行,除非你在其周围添加{
和}
括号以指示应该有几行被认为是一个单一的块。
答案 1 :(得分:1)
函数getchar()或其他函数 像fgetc一样,fgets接收'enter'为 一个字符?
是的,'输入'是字符10.您可以通过添加一行来看到这一点:
ch=getchar();
printf("Received: %d\n", ch);
ch=convert(ch);
ABC 收到:97
收到:98
收到:99
收到:10
答案 2 :(得分:0)
是的,它会的。换行符是该行的一部分,因此它将作为输入的一部分。
您可能希望使用换行符作为退出程序的字符,除非您需要处理多行。
编辑:您可能还想使用do{}while loop而不是传统的while循环
答案 3 :(得分:0)
是的,getchar()
收到'enter'以及您键入的任何其他字符。
您可以使用
测试'enter'if (ch == '\n') { /* ... */ }
另请注意,只有在您输入“输入”后才会收到
这就是“线路缓冲”输入背后的设计。
答案 4 :(得分:0)
我想这个问题已经得到了解答,但在我看来,转换有一个没有人提到过的问题。字符按值传递,因此加或减32对ch没有影响。此外,convert唯一返回的值是-1。我不明白这段代码是如何按预期工作的。