为什么用scanf_s和gets都会显示错误(用的VS2017)?

        #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define MAX_STAGE 10  /*关卡数*/
#define LEVEL_MIN  3  /*最低等级*/
#define LEVEL_MAX 20  /*最高等级*/

int sleep(unsigned long x)
{
    clock_t c1 = clock(), c2;

    do {
        if ((c2 = clock()) == (clock_t)-1)  /*错误*/
            return 0;
    } while (1000.0 * (c2 - c1) / CLOCKS_PER_SEC < x);
    return 1;
}

int main()
{
    int i, stage;
    int level;
    int success = 0;
    clock_t start, end;
    const char ltr[] = "ABCDEFGHIJKLMNOPQSYUVWXYZ";

    srand(time(NULL));

    printf("英文字母记忆训练\n");

    do {
        printf("输入要挑战的等级(%d~%d)", LEVEL_MIN, LEVEL_MAX);
        scanf_s("%d", &level);
    } while (level < LEVEL_MIN || level > LEVEL_MAX);

    printf("来记忆一个%d个英文字符吧。\n", level);

    start = clock();
    for (stage = 0; stage < MAX_STAGE; stage++)
    {
        char mstr[LEVEL_MAX + 1];
        char x[LEVEL_MAX * 2];

        for (i = 0; i < level; i++)            /*生成作为题目的字符串*/
            mstr[i] = ltr[rand() % strlen(ltr)];
        mstr[level] = '\0';

        printf("%s", mstr);
        fflush(stdout);
        sleep(1000 * level);          /*问题提示时间*/

        printf("\r%*s\r请输入: ", level, "");
        fflush(stdout);
        //scanf_s("%s", x);  /*此处应该怎么改*/
        gets(x);

        if (strcmp(x, mstr) != 0)
            printf("\a回答错误。\n");
        else
        {
            printf("回答正确。\n");
            success++;
        }
    }
    end = clock();

    printf("%d次答对了%d次。\n", MAX_STAGE, success);
    printf("用时%.1f秒。\n", (double)(end - start) / CLOCKS_PER_SEC);

    system("pause");
    return 0;
}
c
0

1个回答

scanf_s("%s", x, LEVEL_MAX * 2 - 1);

1
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复klyxyl: 如果问题解决,请点我回答左上角的采纳。
9 个月之前 回复
klyxyl
Zero-Se 谢谢!
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
请教一个scanf_s和gets的问题,用gets第一次输入总是错误,为什么呢
#include rn#include rn#include rn#include rnrn#define MAX_STAGE 10 /*关卡数*/rn#define LEVEL_MIN 3 /*最低等级*/rn#define LEVEL_MAX 20 /*最高等级*/rnrnint sleep(unsigned long x)rnrn clock_t c1 = clock(), c2;rnrn do rn if ((c2 = clock()) == (clock_t)-1) /*错误*/rn return 0;rn while (1000.0 * (c2 - c1) / CLOCKS_PER_SEC < x);rn return 1;rnrnrnint main()rnrn int i, stage;rn int level;rn int success = 0;rn clock_t start, end;rn const char ltr[] = "ABCDEFGHIJKLMNOPQSYUVWXYZ";rnrn srand(time(NULL));rnrn printf("英文字母记忆训练\n");rnrn do rn printf("输入要挑战的等级(%d~%d)", LEVEL_MIN, LEVEL_MAX);rn scanf_s("%d", &level);rn while (level < LEVEL_MIN || level > LEVEL_MAX);rnrn printf("来记忆一个%d个英文字符吧。\n", level);rnrn start = clock();rn for (stage = 0; stage < MAX_STAGE; stage++)rn rn char mstr[LEVEL_MAX + 1];rn char x[LEVEL_MAX * 2];rnrn for (i = 0; i < level; i++) /*生成作为题目的字符串*/rn mstr[i] = ltr[rand() % strlen(ltr)];rn mstr[level] = '\0';rnrn printf("%s", mstr);rn fflush(stdout);rn sleep(1000 * level); /*问题提示时间*/rnrn printf("\r%*s\r请输入: ", level, "");rn fflush(stdout);rn //scanf_s("%s", x);rn gets(x);rnrn if (strcmp(x, mstr) != 0)rn printf("\a回答错误。\n");rn elsern rn printf("回答正确。\n");rn success++;rn rn rn end = clock();rnrn printf("%d次答对了%d次。\n", MAX_STAGE, success);rn printf("用时%.1f秒。\n", (double)(end - start) / CLOCKS_PER_SEC);rnrn system("pause");rn return 0;rn[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/3.gif][/img]
定义gets标识符错误?
为什么为什么?rn[img=https://img-bbs.csdn.net/upload/201701/15/1484449470_935691.png][/img]rnrnrn改成scanf后结果也不对,哪里写错了呢??rn[img=https://img-bbs.csdn.net/upload/201701/15/1484449547_264321.png][/img]rnrn求指教[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/96.gif][/img]
为什么用cin >> 和gets输入字符数组结果不同呢
题:12、有一行电文,已按下面规律翻译成密码:rnA——>Z a——>zrnB——>Y b——>yrnC——>X c——>xrn----------- ---------rn----------- ----------rn即第一个字母变成第26个字母,第i个字母变成(26-i+1)个字母……..非字母字符不变。要求编程将密码译回原文,并打印出密码和原文rn#include rnusing namespace std;rnint main()rnrn int j,n;rn char ch[80],tran[80];rn cout <<"input cipher code:";rn gets(ch); //用个gets输入的话可以完整的字符数组,而用cin>>输入只能输入空格前面的字符rn cout <<"cipher code:"<='A')&&(ch[j]<='Z'))rn tran[j]=155-ch[j];rn else if((ch[j]>='a')&&(ch[j]<='z'))rn tran[j]=219-ch[j];rn elsern tran[j]=ch[j];rn j++;rn rn n=j;rn cout <<"original text:";rn for(j=0;j>ch; 则运行结果为:rn-----------------------------------rninput cipher code:[u]This is a C++ program.[/u]rncipher code:Thisrnoriginal text:Gsrhrn------------------------------------rn程序运行结果不正确,也就是用cin没有提取到第一个空格后面的字符。rnrn有大侠能告知这是为什么吗。我用的是谭浩强的《C++程序设计》 书上说 用cin >>ch 可以用字符数组名输入字符串。rnrnrnrnrnrn
每次电脑重启都会显示abd错误
[img=https://img-bbs.csdn.net/upload/201607/21/1469109826_39550.png][/img]rn在网上搜过,都是说kill adb, restart adb.这样是可以 只是我弄好之后,电脑关机,再开了之后在打开eclipse又是这个问题,就是说我每次都要按照先杀掉adb,再重新开始adb,很麻烦,没有一次就设置好以后都不用再设置的办法吗,我的platform-tools里有adb.exe,以前好好的,就我装了android studio就这样了,没有怪AS的意思 。求解决,谢谢们~ :)
通过vs2017调试显示错误是0x00000000663C8888
Breakpoint detected at Fri Mar 29 12:03:29 2019 Fault Count: 1 Abnormal termination: Breakpoint Register State (from fault): Stack Trace (from fault): This error was detected while a MEX...
用fgets替代gets
改用 fgets 和 fputs #include &amp;amp;amp;amp;lt;cstdio&amp;amp;amp;amp;gt; #include &amp;amp;amp;amp;lt;cstring&amp;amp;amp;amp;gt; #include &amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;gt; using namespace std; using LL = long long; const int inf = 0x3
为什么用vs2017编写C语言时会出现汉字乱码
比如nprintf("沙发斯蒂芬是”)这一句输出就是乱码,既不是汉字,也不是繁体字n求解
为什么用window.open打开的窗口的位置,每次都会不同?
var formulaWindowFeatures = "resizable,status,width=800,height=600,scrollbars," +"screenX=100,screenY=10,dependent=1";rn window.open(url+"report_design&"+reportPK,"报表器",formulaWindowFeatures);rnrn为什么用window.open打开的窗口的位置,每次都会不同?rn如何固定呢?
用gets()还是 fgets()?
写一个统计一个字符串的数字个数的程序时,使用gets()输入字符串,结果出现warning,虽然程序能正常运行,但实在看着别扭,解决和原因分析如下。       原因分析:gets()未指定缓冲区大小,编译器将此视为隐患:实际输入字符串长度超过缓冲区大小,缓冲区溢出。                   fgets()第二个参数指定了缓冲区大小,警告消失。              ...
记第一次用VS2017遇到的错误
1.意外的类型 int(int不允许使用类型名) 犯了一个有一点傻的错误。在编辑主函数的打成了 int main{ int n; } 然后它就提示error C3861: “n”: 找不到标识符还有int 不允许使用类型名 解决办法:应该把上面的代码改成(加一个括号): int main (){ int n; } ...
关于scanf_s
《C Primer Plus》课后习题 第4章第4题:rn编写一个程序,要求输入身高(以英寸为单位)和名字,然后以如下形式显示:rnDabney,you are 6.208 tallrnrnCode:rn/*test 4.8.4*/rn#includernint main(void)rnrn printf("Please enter your height in inch and name:\n");rn float height;rn char name[10];rn scanf_s("%f %s", &height, 10, name, 10);rn printf("%s,you are %4.3f tall\n", name, height);rn return 0;rnrnrn请帮忙看看这个程序的不合理之处,谢谢!rnrn关于scanf_s的参数大小,如果要输入一个float变量,参数大小应该为多少?
C++为什么用模板类,为什么用泛型?
1、通过泛型可以定义类型安全的数据结构(类型安全),而无须使用实际的数据类型(可扩展)。 2、这能够显著提高性能并得到更高质量的代码(高性能),因为您可以重用数据处理算法,而无须复制类型特定的代码(可重用)。
gets
学C++没多久,刚看了一遍书和视频教程,看例题的时候被这几个函数弄的很迷糊,不知道怎么用才算准确rncin.get() //输入一个字符rngetline() //输入一个字符串rncin.getline() //和getline()不一样?rngetchar() //输入一个字符rngets() //也是输入一个字符串?rn其他rnrn网上也搜了不少,但是要么例子太复杂,没看懂,要么说的不全面(这样的输入函数貌似很多的样子。。呵呵,我被弄糊涂了)rnrn能用一些简单的例子给我说一下就好了^_^谢谢啦!rn
为什么用ShellExecute执行错误,好怪!!!
程序在改之前是可以的,但是我改了一下程序的其它地方,就不能执行下面的语句了,rn不知道是为什么,并且得不到它的返回值。 奇晕。rnShellExecute(rn Application.MainForm.Handle,rn nil,rn 'pglmain.exe',rn nil,rn nil,rn SW_MAXIMIZE);
为什么用GDI+总是出现连接错误!!
如题!
为什么用continue时出现错误?
诸如有没有遇到过使用conitune时出现反常的情况?我现在遇到rn......rn if cardstate1<> 1 thenrn beginrn continue;rnrn end;rn......rncardstate1为0时,不执行条件。rn但改为rn......rn k:=1;rn if cardstate1<> 1 thenrn beginrn continue;rn k:=1;rnrn end;rn......rncardstate1为0时,执行条件。rn为什么?
为什么用ResultSet作为函数参数会出错误?
代码如下:rn<%!rn String GetColumn(ResultSet rs,String colName)rn return rs.getString(colName);rn rn%>rnrn错误提示如下:rnunreported exception java.sql.SQLException; must be caught or declared to be thrownrnrn请问该如何处理,函数该如何写?
为什么用text数据类型会发生错误?
在sql server上有一个表,里面的字段类型为text,可是当我用"table1.fieldbyname('content1').asstring:=''"语句时,却出现错误提示,如果把表的字段类型改成char就不会出错了.这是为什么,但如果我把字段类型换成char却满足不了我的需求,怎么解决这个问题?
为什么用aspmail组件发送邮件,总是有错误
为什么用aspmail组件发送邮件,总是有错误rn<%rnSet Mailer = Server.CreateObject("SMTPsvg.Mailer")rnMailer.FromName = "Joe’s Widgets Corp."rnMailer.FromAddress= "konanlin@21cn.com"rnMailer.RemoteHost = "smtp.163.com"rnMailer.AddRecipient "John Smith", "ronanlin@163.com"rnMailer.Subject = "Great SMTP Product!"rnMailer.BodyText = "Dear Stephen" & VbCrLf & "Your widgets order has been processed!"rnif Mailer.SendMail thenrn Response.Write "Mail sent..."rnelsern Response.Write "Mail send failure. Error was " & Mailer.Responsernend ifrn%>rnrn总是提示错误Mail send failure. Error was [10057] Socket is not connected rn请问是什么原因???
为什么用Dreamweaver打开文件错误呢?
我有两个文件top.html和buttom.html,我用Dreamweaver打开buttom.html,可是它总是打开top.html,而且打开其它的html文件,也是打开top.html。这是为什么啊?
vs2017 mfc应用程序生成错误
[img=https://img-bbs.csdn.net/upload/201803/08/1520513961_435904.jpg][/img]rnvs2017 mfc应用程序生成的时候出现这个是怎么了。rn生成以后还有错误rn[img=https://img-bbs.csdn.net/upload/201803/08/1520513958_110989.jpg][/img]
VS2017未识别错误
请问这是什么问题啊?rn[img=https://img-bbs.csdn.net/upload/201807/23/1532316846_384407.png][/img]
使用vs2017出现错误
[img=https://img-bbs.csdn.net/upload/201708/11/1502417231_245634.png][/img]rn电脑用的是win10系统 然后vs是2017版本 不知道怎么解决 用了好几种办法都不行 求帮助
scanf_s()函数用法
scanf_s()函数用法形式:    scanf_s(&quot;输入格式&quot;,存储输入的地址,最大字符数);举例://scanf_s函数测试 #include&amp;lt;stdio.h&amp;gt; int main(void) { int retval; //C语言的数据定义和数据操作是分开的,数据定义就定义,定义过后再操作 char p[20]; printf(&quot;请输入你的想法:&quot;); retval ...
gets()
在什么情况下会出现直接跳过这个函数而不接受用户输入?
*gets() ??
请问一下*gets()函数得到的是指针字符串吗?rn
使用scanf_s发生写入错误的解决途径
#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;stdlib.h&amp;gt;char *revstr(char *str, size_t len){ char    *start = str; char    *end = str + len - 2;//小心把a最后的\0放到第一位,所以要改成-2 char    ch; if (str != NULL) { while (s...
scanf_s的用法
int main() { int a; char l1[10]; scanf_s(&quot;%s&quot;, l1); printf(&quot;%s&quot;, l1); return 0; } 上边的简单代码竟然报错,查询了以后发现是scanf_s函数少加了一个检查边界的参数,改为下图 int main() { int a; char l1[10]; scanf_s(&quot;%s&quot;, l1,sizeof(l1...
scanf_s问题??????????
rn ULONG processid=0;rn while(TRUE)rn rn printf("请输入隐藏进程ID:");rn scanf_s("%d",&processid,4);rn rnrn上面的程序我输入数字没问题,如果我输入字符f,就死循环了,不停的显示“请输入隐藏进程ID:”
为什么用窗体的Canvas.Brush画图却不显示
我给窗体的Canvas.Brush赋一个TBITMAP,然后绘制窗体画布却没有看到效果.rn整个窗体还是一片空白.代码如下:rnrnrnprocedure TForm1.Button1Click(Sender: TObject);rn B:TBitmap;rn F:TForm;rnbeginrn B:=TBitmap.Create;rn F:=Tform.Create(Self);rn B.LoadFromFile('d:\zw.bmp');rn F.Canvas.Brush.Bitmap:=B;rn F.Canvas.FillRect(f.ClientRect);rn F.ShowModal;rn B.Free;rn F.Free;rnend;rnrn
急!为什么用BitBlt显示不出来图象?
rnvoid CXpButtonItemDlg::OnPaint() rnrn RECT rt;rn GetClientRect(&rt);rnrn if (IsIconic())rn rn CPaintDC dc(this); // device context for paintingrnrn SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);rnrn // Center icon in client rectanglern int cxIcon = GetSystemMetrics(SM_CXICON);rn int cyIcon = GetSystemMetrics(SM_CYICON);rn CRect rect;rn GetClientRect(&rect);rn int x = (rect.Width() - cxIcon + 1) / 2;rn int y = (rect.Height() - cyIcon + 1) / 2;rnrn // Draw the iconrn dc.DrawIcon(x, y, m_TileIcon);rn rn elsern rn //绘制对话框的边框rn CDC * dc = GetDC();rnrn HDC memDCMask;rn memDCMask = CreateCompatibleDC(dc->m_hDC);rn rn HBITMAP pMask;rn pMask = ::LoadBitmap(NULL,MAKEINTRESOURCE(IDB_MASK));//底图rn ::SelectObject(memDCMask,&pMask);rn rn HDC memDCTu;rn memDCTu = CreateCompatibleDC(dc->m_hDC);rn HBITMAP pTu;rn pTu = ::LoadBitmap(NULL,MAKEINTRESOURCE(IDB_TU));//凸图rn ::SelectObject(memDCTu,&pTu);rnrn BOOL err2 = ::BitBlt(dc->m_hDC,105,111,40,40,memDCMask,0,0,SRCAND);rn ::BitBlt(dc->m_hDC,105,111,40,40,memDCTu,0,0,SRCPAINT);rnrn rn delete pMask;rn delete pTu;rn rn CDialog::OnPaint();rnrn rnrnrn谢谢
为什么用System.Diagnostics.Process.Start启动的进程显示不出来
private void Button2_Click(object sender, System.EventArgs e)rn rn System.Diagnostics.Process.Start("C:\\test.xls"); rn rnrn但在进程中有 rnrn进程名 用户 rnEXCEL.EXE ASPNETrnrn怎么让它显示在前台啊 急 帮忙啊
为什么用println不能显示utf-8中文
用System.out.println()输出后,英文字正常,但中文却是乱码,但把乱码粘贴下来后,在IE中用UNCODE打开乱码文字,可以正常显示,不知道是什么原因?
为什么用CSplitterWnd分割的窗口不显示
我用CSplitterWnd分割的窗口,分好后不显示,视窗还是一个rnif (!m_wndSplitterH.CreateStatic(this, 2, 1))rn return -1;rnrnif (!m_wndSplitterH.CreateView(0, 0, RUNTIME_CLASS(CSQLDoc), CSize(100, 30), pContext) ||rn !m_wndSplitterH.CreateView(1, 0, RUNTIME_CLASS(CRecordsView), CSize(0, 100), pContext))rnrn m_wndSplitterH.DestroyWindow();rn return -1;rnrn内容如上,rnCSQLDoc和CRecordsView都是用类向导生成的view类,没有进行改动。
为什么用BARCODE控件显示不了条形码?
在程序中使用了OFFICE的BarCode控件,控件在程序运行后显示是一片空白,用语句rnbarcode.value := 143124321;后,还是一样,这个控件该如何使用?望高手指点!!!
Vs2017显示方法列表
前言: 习惯使用VA_X的都知道,打开一个文档后,会有一个方法列表框,下拉会显示当前文件的所有成员方法,并且支持模糊搜索,确实对于查找定位代码很方便。 对于不使用VA_X的同学,其实VS自身带的也有这个功能,只是不支持模糊查找而已,不仅仅是Vs2017,其他的版本打开这个功能的办法都一样。 英文版:Go to Options-&amp;gt;Text Editor-&amp;gt;(your languag...
VS2017显示函数列表
1、英文版:Tools-&gt;Options-&gt;Text Editor-&gt;(your language 或者 all language)-&gt;勾选 Navigation bar 中文版:工具→选项→文本编辑器→所有语言→导航栏 2、在class view下可以查看每个工程下的元素了。 打开后依次显示:工程名→类名→函数名。 ...
VS2017生成的SDF文件有什么用
有100多MB,能删除吗?
[UVa1586] 关于用getchar与scanf_s解决问题
根据题目思路很明确,就是要分辨出分子式的字母和数字。 当判断为字母时,将字母缓存,计算现在的分子式,将数字缓存清空。 当判断为数字时,将数字缓存*10再加上新获取的数字。 当分子式结束时,判断最后一个字符进行上述的步骤。 下面是代码:#include #include using namespace std; int main() { const char rev[]= "CHON012
RESTful是什么,为什么用,怎么用
RESTful是什么