我制作了一段简单的代码来记录用户输入的内容:
#include <stdio.h>
#include <unistd.h>
int main() {
char letter;
printf("Enter in a character:");
scanf("%c", &letter);
sleep(2);
printf("Letter was: %c", letter);
return 0;
}
在此代码中,它应该在第8行睡眠2秒。
不幸的是,即使我有正确的library。
,睡眠也是一个未定义的引用有没有办法在 Windows Vista 中修复此问题?
答案 0 :(得分:5)
sleep()是POSIX函数,但您使用的是MinGW,它不提供POSIX支持。引用http://lists-archives.com/mingw-users/01723-including-library-for-unistd-h-header.html
请记住,mingw不再提供任何Unix API Microsoft C运行时提供。 (嗯,实际上确实如此,但只是一点点 更多,没有“困难”的东西。)Microsoft C运行时提供Unixish 函数如open(),read(),close(),但不是函数 getuid(),getegid(),getppid()。
也不睡觉()。如果你想要一个POSIX环境,你需要在Windows上使用Cygwin或其他一些POSIX支持;见http://en.wikipedia.org/wiki/POSIX#POSIX_for_Windows
如果你只需要MinGW给你+ sleep(),你可以使用Windows Sleep()函数(注意它是大写的),它接受一个参数(以毫秒为单位)并要求你包含Windows.h(而不是unistd.h中);见sleep function in Windows, using C
答案 1 :(得分:1)
如果它是未定义的引用,则表示链接器未将包含 sleep 的库链接到您的代码。
您可能已经包含 unistd.h (它为您提供了适当的函数原型),但您还必须链接到包含 sleep 实现的库。
显示您如何编译和链接该程序。
答案 2 :(得分:1)
如果一个程序必须睡2秒钟,你进入2000睡眠功能..
Sleep(unsigned int): - unsigned int是毫秒数(1秒= 1000毫秒)
请在睡眠中给出“s”作为首字母(5000);
并包含头文件Windows.h
答案 3 :(得分:0)
在代码启动时包含以下函数,只要您希望执行暂停而不给CPU带来额外负担(如果是for循环)
void sleep(unsigned int mseconds)
{
clock_t goal = mseconds + clock();
while (goal > clock());
}