0
我正在使用以下C++代碼(稱爲test.cpp
)。我只想從控制檯讀取一個int。使用crontab運行C++程序,「cin」不會等待我的輸入
#include <iostream>
#include <unistd.h>
#include <limits>
using namespace std;
int main()
{
for (;;)
{
cout << "please make a choice" << endl;
int choice;
cin >> choice;
if (!cin)
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "error"<< endl;
usleep(1000);
}
else
{
cout << "cin is: " << choice << endl;
}
}
}
當我手動執行它,它是好的,並且控制檯等待我的輸入。但是,當我在crontab中運行它(命令如下:53 10 * * * /root/test
)時,它會打印大量內容(如下所示)。它似乎忽略了「cin」並繼續運行。有誰知道爲什麼?
在crontab中運行時,我不應該使用cin
嗎?我知道這是沒有道理的,但我試圖找出原因。
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
你的代碼是好的,就像你說的那樣手動執行時它是有效的。使用crontab,它可以工作,cron運行你的代碼等待'cin'並跳轉到'if(!cin)'並打印'error'。你爲什麼使用cron來運行它,你想實現什麼? –
cron應該等cin嗎?爲什麼會跳到第二行?我可能會最終刪除「cin」,只是對這種行爲感到好奇。 – azhu
在'cin >>選項後面加''usleep(1000)'';等待輸入,如果沒有輸入,下一個時間範圍內,下一個語句會觸發並返回'error' –