我是C的新手,这是我一直困惑的事情 让我们说我有这样的代码 我只想使用char
char a, b, c;
printf("input first character: ");
scanf(" %c", &a);
printf("input second character: ");
scanf(" %c", &b);
printf("input thrid character: ");
scanf(" %c", &c);
我多么希望能够在太空中阅读;我注意到这只会在非空格字符中读取,如果我想读取空格以及类似这样的内容,那该怎么办? &#39 ;;我该如何扫描这个空间;
现在通过听取使用getchar()的建议我写了这个:
#include<stdio.h>
int main(void)
{
char a,b,c;
printf("input the first char:");
a=getchar();
printf("input the second char:");
b=getchar();
printf("input the third char:");
c=getchar();
return 0;
}
当我编译并运行程序
时,会发生什么奇怪的事情程序输出就像这样
input the first char:
input the second char:input the third char:
现在它永远不会让我输入第二个字符,它直接跳到第三个请求结尾我只被要求输入2个输入,这很奇怪,因为程序明确要求代码中的3个。
现在这是我写的一个程序,我在代码块中添加了建议
int main(void)
{
int totalHeight=0, floorWidth=0, amountOfStories, amountWindowForTop, amountWindowForMiddle, amountWindowForBottom, windowHeight, middleWindowWidth, topWindowWidth, bottomWindowWidth, minimumHeight, minimumWidth;
int betweenDistanceTop, betweenDistanceMiddle, betweenDistanceBottom, edgeDistanceTop, edgeDistanceBottom, edgeDistanceMiddle;
char topFloorWindowContent, middleFloorWindowContent, bottomFloorWindowContent, windowBorder, floorBorder;
int tempMax, tempValue, tempSideDistance, tempBetweenDistance;
printf("please enter how many stories your building would like to have: ");
scanf("%d",&amountOfStories);
minimumHeight=amountOfStories*6+1;
while((totalHeight<minimumHeight)||((totalHeight%amountOfStories)!=1))
{
printf("please enter the totalHeight (minimum %d): ",minimumHeight);
scanf("%d",&totalHeight);
}
printf("please enter how many window building would have for top floor: ");
scanf("%d",&amountWindowForTop);
printf("please enter how many window building would have for middle floors: ");
scanf("%d",&amountWindowForMiddle);
printf("please enter how many window building would have for bottom floor: ");
scanf("%d",&amountWindowForBottom);
tempMax=amountWindowForTop;
if (tempMax<amountWindowForMiddle)
{
tempMax=amountWindowForMiddle;
}
if (tempMax<amountWindowForBottom)
{
tempMax=amountWindowForBottom;
}
while(floorWidth<tempMax)
{
printf("please enter the width of the building (Minimum %d): ",tempMax*4+1);
scanf("%d",&floorWidth);
}
char a, b, c;
printf("a:");
a=getchar();getchar();
printf("b:");
b=getchar();getchar();
printf("c:");
c=getchar();
printf("a=%c, b=%c, c=%c", a, b, c);
return 0;
}
现在这里是有趣的部分,如果我把这个代码块放在大程序中它没有工作输出是这样的
please enter how many stories your building would like to have: 2
please enter the totalHeight (minimum 13): 2
please enter the totalHeight (minimum 13): 2
please enter the totalHeight (minimum 13): 13
please enter how many window building would have for top floor: 2
please enter how many window building would have for middle floors: 2
please enter how many window building would have for bottom floor: 2
please enter the width of the building (Minimum 9): 9
a:
b:*
c:a=
, b=
, c=
因为我们可以看到b c全部读入\ n而不是空格*而c甚至没有读过任何内容为什么会这样?
答案 0 :(得分:0)
您应该使用getchar()
a = getchar();
答案 1 :(得分:0)
scanf在您提供任何数据之前不会扫描任何内容,因此扫描“char”无效。
为此你必须使用getchar()fun for char或gets()for string,它将扫描数据直到你输入。即使你没有提供任何字符或简单的“char”,它也会出现。
答案 2 :(得分:0)
如果你想阅读有空格的角色,那么你可以使用gets()
功能。
char str[10];
str=gets();
答案 3 :(得分:0)
尝试scanf(“%c”,&amp; ch)。 如scanf格式说明符中所述:
“空白字符:该函数将读取并忽略在下一个非空白字符之前遇到的任何空格字符(空白字符包括空格,换行符和制表符 - 请参阅isspace)。格式字符串中的单个空格验证任何数量从流中提取的空白字符(包括无)。“
getchar()获得意外结果,因为在Windows中,换行符(当你在控制台中按Enter键时)是两个字符。
答案 4 :(得分:0)
您的代码存在以下问题:当您读取第一个字符(a
)时,按Enter(\n
)以插入下一个字符,现在stdin
处是\n
,你还没有被淹没。当您尝试读取下一个字符(b
)时,程序会从\n
读取前一个stdin
,并且不允许您读取下一个字符。因此,当您使用getchar()
阅读字符,然后按键盘上的Enter键时,您需要第二个getchar()
来删除\n
。
以下是可以解决您的问题的示例代码:
#include<stdio.h>
int main(void) {
char a, b, c;
printf("a:");
a=getchar();getchar();
printf("b:");
b=getchar();getchar();
printf("c:");
c=getchar();
printf("a=%c, b=%c, c=%c", a, b, c);
return 0;
}
对于你发布的编辑,你需要把所谓的&#34; stdin清洁器&#34;在获取a
,b
,c
:
while(getchar()!='\n');
它只是将所有角色重新移动到\n
。
请注意,当您发布的程序有很多来自键盘的输入时,有时您会遇到此问题,因为stdin
中有额外的字符。所以这个问题的一般答案是试图弄清楚这些额外的字符(大多数在某处有一个额外的\n
)可以使用像我提到的那样删除的功能,以便你可以继续阅读stdin
。