【发布时间】:2012-12-31 04:16:57
【问题描述】:
#include<stdio.h>
#include<conio.h>
void sstring();
int main()
{
char ch1[10],ch2;
printf("Enter the value of first character : ");
scanf("%s",&ch1);
sstring();
getch();
return 0;
}
void sstring()
{ char ch2;
printf("Enter the value of second character : ");
scanf("%c",&ch2);
printf("Got the second character");
}
函数内部的第二个 scanf 不起作用....程序不会在第二个 scanf 处停止?
【问题讨论】:
-
请注意,虽然您声明了
sstring(),但您并没有为其指定原型。在 C(但不是 C++)中,sometype function();形式的声明声明存在一个返回sometype但参数列表未指定的函数(但它不是可变长度参数列表)。要为不带参数的函数声明函数原型,请编写sometype function(void);。为了保持一致性,我建议也使用显式(void)表示法定义函数。 -
另外,最好检查
scanf()的返回值,以确保它成功。例如,您可以使用if (scanf("%9s", ch1) != 1) ...read failed...。请注意数组名称上没有&。从技术上讲,您传递的是一个数组的地址(char (*)[10]类型),而不是scanf()所期望的char *。你的编译器应该警告类型不匹配;如果不是,请了解如何使它这样做或获得更好的编译器。然后注意警告! -
能否请您为我推荐一个适用于 c 和 c++ 的 Windows 的良好编译器...请与我分享我可以从哪里获得它的链接...
-
嗯,我希望可以说服 MSVC 提供这样的 cmets,但 GCC 肯定可以。我在带有 GCC 的 Windows 上愉快地使用了 Cygwin;还有可以与 GCC 一起使用的 MinGW。