对于int型的输入 输入的缺少字符串 字符 汉字 造成了程序崩溃

H_L_Y 2019-05-13 01:40:38
对于int型的输入 输入的缺少字符串 字符 汉字 造成了程序崩溃 虽然知道要进行判断是否合法 如果不合法输出 输入不合法 然后重新输入 但是 每次都进入死循环 求大佬指点 最好给点简单的代码例子
...全文
158 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2019-05-14
  • 打赏
  • 举报
回复
乍看起来c++的cin、cout、ifstream、ofstream、istringstream、ostringstream在输入、输出上比c的scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf简单,不用格式控制符! 但是不用格式控制符,输入输出恰好是你期望的格式的时候好说;等到输入输出不是你期望的格式的时候,你就会觉得还是用格式控制符更方便、更靠谱。 摒弃cin、cout、ifstream、ofstream、istringstream、ostringstream! 使用scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf。
拥抱Linux 2019-05-14
  • 打赏
  • 举报
回复
引用 9 楼 H_L_Y 的回复:
谢谢指点 这下知道了

不必客气。烦请 及时 结帖、给分哈! 谢谢! :)
H_L_Y 2019-05-14
  • 打赏
  • 举报
回复
引用 8 楼 拥抱Linux的回复:
[quote=引用 5 楼 H_L_Y 的回复:]

看下面的图片 求大佬解答 c++


原来想要的是cpp代码啊,道理和c的是一样的。以下是参考代码,另外,俺不擅长cpp,以后不一定会回复cpp的问题哈。

#include <iostream>

using namespace std;

int main(void)
{
int num;

while (1) {
cin >> num;
if (num == 1 || num == 2) {
break;
} else {
cout << "其实,num 得到的值是:" << num << endl;
cout << "输入有错!请重新输入" << endl;
cin.clear();
cin.ignore(1024, '\n'); // 要是输入了超过 1024 个字符而又死循环的话,把括号里的 1024 再改大一点
}
}

return 0;
}

~[/quote] 谢谢指点 这下知道了😊
拥抱Linux 2019-05-13
  • 打赏
  • 举报
回复
引用 5 楼 H_L_Y 的回复:
看下面的图片 求大佬解答 c++


原来想要的是cpp代码啊,道理和c的是一样的。以下是参考代码,另外,俺不擅长cpp,以后不一定会回复cpp的问题哈。

#include <iostream>

using namespace std;

int main(void)
{
int num;

while (1) {
cin >> num;
if (num == 1 || num == 2) {
break;
} else {
cout << "其实,num 得到的值是:" << num << endl;
cout << "输入有错!请重新输入" << endl;
cin.clear();
cin.ignore(1024, '\n'); // 要是输入了超过 1024 个字符而又死循环的话,把括号里的 1024 再改大一点
}
}

return 0;
}

Italink 2019-05-13
  • 打赏
  • 举报
回复
都跟你讲了全当字符串处理,你以为你输入 123,123就是数字?123仍然是字符,只不过你用一个int类型来接受这串字符,cin那就有一个类型转换, 你用输入1、2来结束,那万一我输入一个ASCII码为1或者2的字符,你还能结束循环?

#include<iostream>
#include<string>
using namespace std;
int main() {
	string str;
	int flag = 1;
	cout << "请输入:";
	while (true) {
		cin >> str;		//全部当成字符串来处理
		if (str == "1" || str == "2")
			break;
		cout << "非法输入,请重新输入:";
	}
	cout << stoi(str); //调用转换函数string->int
	return 0;
}
636f6c696e 2019-05-13
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;
int main()
{
    char a[10];
    int num;
    while (1)
    {
        cin.getline(a, 10);
        if (0 == strcmp(a, "1") || 0 == strcmp(a, "2") || 0 == strcmp(a, "3"))
        {
            num = atoi(a);
            cout<<"num = "<<num<<endl;
            break;
        }
        else
        {
            cout<<"wrong input:"<<a<<endl;
            cin.clear();
            cin.sync();
        }
    }
    return 0;
}
调试结果: 33 wrong input:33 22 wrong input:22 4213 wrong input:4213 21 wrong input:21 2a wrong input:2a asdasdasd wrong input:asdasdasd 3 num = 3
引用 4 楼 H_L_Y 的回复:
我需要这样的 但是 第一个图网友提供 我们用的都是vs2019 在他的电脑上面运行时候 输入字母 会输出错误的输入 然后重新输入 但是同样的代码 为什么在我的电脑上面运行的时候 输入字母就死循环了 本人现在的需求是 键盘输入不管是字母 字符串 汉字 都判断为错误 然后重新输入 直到输入1 或2 或3
H_L_Y 2019-05-13
  • 打赏
  • 举报
回复
引用 1 楼 拥抱Linux的回复:
参考代码如下:「请及时 结帖、给分! 携手共建美好和谐社区!」

#include <stdio.h>

int main(int argc, char const *argv[])
{
int a;
while (1 != (scanf("%d", &a))) {
// 清空输入缓冲区
int getBuff;
while ((getBuff = getchar() != '\n') && (getBuff != EOF)) {
NULL; // Actually no statement needed here, just a dummy.
}

printf("Wrong input. Try again!\n");
}
printf("a = %d\n", a);
return 0;
}

输入的数据中,如果以整数开头的话,会接收最前面的有效的整数,比如输入 123abc 的话,会接收整数123。
如果以非整数开头的话,则需要重新输入。
「请及时 结帖、给分哦! 携手共建美好和谐社区!」
看下面的图片 求大佬解答 c++
H_L_Y 2019-05-13
  • 打赏
  • 举报
回复


我需要这样的 但是 第一个图网友提供 我们用的都是vs2019 在他的电脑上面运行时候 输入字母 会输出错误的输入 然后重新输入 但是同样的代码 为什么在我的电脑上面运行的时候 输入字母就死循环了

本人现在的需求是 键盘输入不管是字母 字符串 汉字 都判断为错误 然后重新输入 直到输入1 或2 或3
赵4老师 2019-05-13
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
char s[80];
int i;
char c;
int main() {
    while (1) {
        printf("Input a integer:");fflush(stdout);
        rewind(stdin);
        fgets(s,80,stdin);
		if (strlen(s)>10) {
			printf("Input too long(>9)!\n");
			continue;
		}
        if (2==sscanf(s,"%d%c",&i,&c)) {
            if ('\n'==c) {
                printf("%d is a integer.\n",i);
                break;
            }
        }
        if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;
        printf("\"%s\" is NOT a integer!\n",s);
    }
    return 0;
}
Italink 2019-05-13
  • 打赏
  • 举报
回复
本来你输入的就是字符,你就全当成字符来接受,比如int,你判断能不能转化成int就可以了
拥抱Linux 2019-05-13
  • 打赏
  • 举报
回复
参考代码如下:「请及时 结帖、给分! 携手共建美好和谐社区!」

#include <stdio.h>

int main(int argc, char const *argv[])
{
int a;
while (1 != (scanf("%d", &a))) {
// 清空输入缓冲区
int getBuff;
while ((getBuff = getchar() != '\n') && (getBuff != EOF)) {
NULL; // Actually no statement needed here, just a dummy.
}

printf("Wrong input. Try again!\n");
}
printf("a = %d\n", a);
return 0;
}

输入的数据中,如果以整数开头的话,会接收最前面的有效的整数,比如输入 123abc 的话,会接收整数123。
如果以非整数开头的话,则需要重新输入。
「请及时 结帖、给分哦! 携手共建美好和谐社区!」

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧