杭电acm2024 我的代码错在哪?麻烦大牛帮我看看,谢谢了!

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

int isdigit(char c)
{
if (c >= '0' && c <= '9')
return 1;
return 0;
}

int isalpha(char c)
{
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
return 1;
return 0;
}

int main()
{
int i, j;
int n;
char s[50];

scanf("%d", &n);

for (j = 0; j < n; j++)
{
getchar();
gets(s);
int flag = 1;
int len = strlen(s);
if (!isalpha(s[0]) && (s[0] != '_'))
{
flag = 0;
printf("no\n");
continue;
}

for (i = 1; s[i] != '\0'; i++)
{
if (!(isdigit(s[i]) || isalpha(s[i]) || (s[i] == '_')))
{
flag = 0;
break;
}
}
if (flag)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}

return 0;
}

你的getchar位置错了。你可以在gets后printf一下读到的字符串看看。
scanf会留下换行符影响后面的输入,但是gets不会,因此把getchar移到scanf后就AC了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-31
#include <stdio.h>
#include <string.h>

int isdigit(char c)
{
    if (c >= '0' && c <= '9')
        return 1;
    return 0;
}

int isalpha(char c)
{
    if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
        return 1;
    return 0;
}

int main()
{
    int i, j;
    int n;
    char s[55];//数组开大一些

    scanf("%d", &n);
 getchar();在scanf后左面用getchar就行了
    for (j = 0; j < n; j++)
    {
       
        gets(s);//因为gets是读入一行的,把回车也会读入,所以后面的话不用再用getchar()
        int flag = 1;
        int len = strlen(s);
        if (!isalpha(s[0]) && (s[0] != '_'))
        {
            flag = 0;
            printf("no\n");
            continue;
        }

        for (i = 1; s[i] != '\0'; i++)
        {
            if (!(isdigit(s[i]) || isalpha(s[i]) || (s[i] == '_')))
            {
                flag = 0;
                break;
            }            
        }
        if (flag)
        {
            printf("yes\n");
        }
        else
        {
            printf("no\n");
        }
    }

return 0;
}

杭电ACM2024题,我的代码错在哪里了?为什么运行时,一旦遇到空格,或者...
(a[i]='_') 改成 (a[i]=='_') 就OK了

杭电acm 2024 我错哪了?
k=1;getchar();\/\/用于接受数字后的'\\n'字符,应写在for语句前即可.(如test case中在字符串前无数字,则不写getchar();输入一个字符时同理)gets(a);l=strlen(a);if (a[0]>='0' && a[0]<='9')\/\/判断条件错误了 k=0;for (j=0;j<=l-1;j++){ if (a[j]<'0' && ...

杭电acm2025:我的代码怎么错了?
把char[101]改成char[1001] ,把delete [] s 注释掉就行了 ,请采纳 include<iostream>#include<string>using namespace std;int main(){char *s=new char[1001];while(cin>>s){char max;max=s[0];int l=strlen(s);for(int m=0;m<l;++m){if(max<s[m]){max=s[m];}}for(int...

杭电2024的问题,请各位高手帮帮忙!!!
你考虑了首字母的要求,以及每个字符的要求,但是合法的标识符还有一个要求,就是不能和已有的库函数及关键字重复,如"switch","break"等等。这儿有个代码,不是我编的,不过编的已经蛮好的了。基本和你思路一样,就是多考虑了一个库函数。include <stdio.h> int identf(char *str);int isKey(char...

杭电acm1002帮忙改一下!!谢谢了
四,你试着输入1234 6 你的代码输出1280 错了,你定义的数组a[] 和数组b[] 每次开始前都要把它们初始化为0,否则下一次测试的时候还保留着上一次的值,这样会出错的。五,case这里的c要大写。还有一点是我把你的代码稍稍做了些变动,目的在于减少时间,你从第一个开始加,加到最后一个,时间...

杭电acm 2521反素数题,小弟愚昧不知我的代码哪错了,求大神赐教。看到别...
给你个AC代码 include "stdio.h"include "string.h"include "math.h"int main(){ int i,n,m,tt,t,j,k,flag,max,count[5002];for(i=1;i<=5001;i++){ count[i]=0;} count[1]=1;count[2]=2;count[3]=2;for (i=4;i<=5001;i++){ for(j=2;j<=i\/2;j++)if(i%j==...

杭电ACM3787 A+B 求解我的代码哪里错了?
include<stdio.h>#include<string.h> int main(){char a[1000],b[1000];__int64 suma,sumb;int t;while(scanf("%s %s",a,b)!=EOF){suma=sumb=0;int lena=strlen(a);int lenb=strlen(b);for(int i=0;i<lena;i++)\/\/<==={if(a[i]>='0'&&a[i]<='9'){t=a[i]-'0...

杭电ACM2045 ,2028下面是我的代码
首先,2045是通过递推来做的,不是这么简单的一个公式可以搞掂。AC代码 include<iostream> using namespace std;long long re[55][2];void init(){ re[1][1]=3;re[2][1]=6;re[3][0]=6;re[3][1]=6;for(int i=4;i<=50;i++){ re[i][0]=re[i-1][1];re[i][1]=re...

杭电oj3199,Hamming Problem,下面是我的代码,c的,一直WA,请大牛看一...
程序的核心算法没有错误,只不过是由于一些ACM的习惯用法你没有注意而已,修改如下:include<stdio.h> __int64 ham[100000];void main(){ __int64 p[3],temp1,temp2,temp3;int i,j,k,t,n;while (scanf("%I64d%I64d%I64d%d",&p[0],&p[1],&p[2],&n)!=EOF)\/*注意这里*\/ {\/*注意...

帮我看看这个程序。素数判定。在杭电acm提交,显示sqrt:对重载函数的...
看了楼上的回答,对ACM的厌恶又增加了一分,感觉跟实际编程脱节太多了。其实楼主用不着用sqrt函数,直接for (i=2; i<=m\/2;i++) 也行。

相似回答
大家正在搜