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

H_L_Y 2019-05-13 01:40:38
对于int型的输入 输入的缺少字符串 字符 汉字 造成了程序崩溃 虽然知道要进行判断是否合法 如果不合法输出 输入不合法 然后重新输入 但是 每次都进入死循环 求大佬指点 最好给点简单的代码例子
...全文
162 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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,321

社区成员

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

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