我的下面的小程序将从用户那里获取5个数字,将它们存储到一个整数数组中并使用函数将它们打印出来。真诚地它不起作用并且没有打印出来。我找不到错误,所以我很乐意提出任何建议。感谢。
#include <stdio.h>
void printarray(int intarray[], int n)
{
int i;
for(i = 0; i < n; i ++)
{
printf("%d", intarray[i]);
}
}
int main ()
{
const int n = 5;
int temp = 0;
int i;
int intarray [n];
char check;
printf("Please type in your numbers!\n");
for(i = 0; i < n; i ++)
{
printf("");
scanf("%d", &temp);
intarray[i] = temp;
}
printf("Do you want to print them out? (yes/no): ");
scanf("%c", &check);
if (check == 'y')
printarray(intarray, n);
getchar();
getchar();
getchar();
getchar();
return 0;
}
答案 0 :(得分:6)
将printarray()
中的输出更改为:
printf("%d\n", intarray[i]);
^^
这将在每个数字后添加换行符。
通常,在C中写入控制台的输出缓冲,直到输出完整的行。您的printarray()
函数不会写任何换行符,因此输出会被缓冲,直到您打印出来。但是,在打印换行符之前,请等待用户输入。
答案 1 :(得分:5)
改为:
char check[2];
还有:
scanf("%s", check);
if (!strcmp(check,"y"))
printarray(intarray, n);
希望有所帮助。您的scanf("%c", &check);
失败了。最终y
(ASCII代码NL
)代替10
,这意味着if
部分失败。
我不知道它是否是一个很好的解决方案。也许有人可以给一个更好的。请记住,如果你输入更大的东西(例如yess
),你会有点不走运;)
答案 2 :(得分:2)
除了有关在数组后打印\n
字符的建议(正确)之外,还需要注意期望“是/否”答案的scanf
。 Muggen是第一个注意到这一点的人(见他的回答)。
您使用了%c
中指定的scanf
。 %c
中的scanf
说明符不会跳过空格,这意味着在您输入数组后,此scanf
将读取输入缓冲区中剩余的任何空格。在输入数组后点击“Enter”键,将换行符放入输入缓冲区。之后scanf("%c", &check)
将立即读取该挂起的换行符,而不是等待您输入“是”或“否”。这是你的代码不打印任何内容的另一个原因。
为了修复scanf
,您必须强制它在阅读实际答案之前跳过所有空格字符。您可以scanf(" %c", &check)
执行此操作。请注意%c
之前的额外空格。 scanf
格式字符串中的空格字符强制它跳过从当前读取位置开始的所有连续空格。换行符恰好是空格,因此scanf
将忽略它。
答案 3 :(得分:0)
printf("%d", intarray[i]);
在此
之后添加新行