进展顺利,没有触及"得到"功能和idk为什么

时间:2018-05-05 02:00:48

标签: c string

我对此代码感到头痛(sry 4 bad eng,我已经知道' bout危险的"得到"功能但仍想使用它) 我使用的是代码块, F9->类型' 1',输入 - >进度运行传递获取功能并且不允许我输入输入

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

int ngat()//stop function
{
    int thoat;
    printf("\nNhap '1' de tiep tuc hoac '0' de thoat: ");//1:continue,0:exit
    scanf("%d",&thoat);
    switch(thoat)
    {
        case 1:main();
        case 0:break;
    }
}

void upper(char s1[])
{
    int i=0;
    while(s1[i]!='\0')
    {
        if (s1[i] >= 'a' && s1[i] <= 'z')
        {
         s1[i] = s1[i] - 32;
        }
        i++;
    }
}

int main()
{
    system("cls");
    puts("1.Viet ham upper (doi ki tu sang ki tu hoa)\n2.Viet ham lower (doi ki tu sang ki tu thuong)\n3.Viet ham proper (doi ki tu dau sang ki tu hoa");
    int sobai;
    printf("\nNhap so cua bai: ");
    scanf("%d",&sobai);
    switch(sobai)
    {
        case 1:
        {
            system("cls");
            char s1[255];
            printf("\nViet ham upper (doi ki tu sang ki tu hoa)");//string upper function
            printf("\nNhap xau:");//input string
            gets(s1);
            upper(s1);
            printf("%s\n",s1);
            ngat();
            break;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

上面代码的问题是scanf()读取整数并在缓冲区中留下换行符。所以gets()只读取换行符,程序会忽略您期望的字符串。

如何解决这个问题?

  • 使用额外的“scanf()”使\n读取新行,即 scanf(“%d\n”, &sobai)。实际上scanf(“%d “, &sobai)也有效(注意额外的 空间)。
  • getchar()之后添加scanf()以阅读额外换行符。