c++如何排除输入的是小数的情况

程序要求输出指定数的倍数,以下是设计函数的部分代码,卡在了输入因子的部分,现在的while循环只能排除掉字符和负数,无法排除掉小数和数字字符同时出现的情况,运行如下图所示,请问该如何修改?希望输入因子只能是整数。

void isBeishu()        //输出指定数的倍数的函数 
{
    int k;
    cout << "输入因子:";
    cin >> k;
    while(cin.fail() || k != (int)k || !(k>0))
    {
        cin.clear();
        cin.ignore(100,'\n');
        cout << "你只能输入一个大于0的整数。" << endl;
        cout << "请输入因子:";
        cin >> k; 
    }

img

img

while (1) {
 cin>>k;
 if (cin.fail()) {
  cin.ignore();
  cin.clear();
  continue;
 } else break;
}

#include <stdio.h>
int main() {
 int k;
 char ln[80],c;
 while (1) {
  printf("Input a integer:");fflush(stdout);
  rewind(stdin);
  fgets(ln,80,stdin);
  if (2==sscanf(ln,"%d%c",&k,&c) && c=='\n') {
   printf("%d\n",k);
   break;
  } else {
   printf("Format error!\n");
  }
 }
 return 0;
}