[英]C Multiple Input in One Line
我正在使用 Code chef 上的代码“DOLL”解决问题“Red Light Green Light”。
在这个问题中,我需要在一行中接受 N 个输入。 我尝试使用 scanf() 但无济于事,它没有用。 它在 N 行中谈论 N 个输入,这不是我想要的。 我尝试使用 fgets 和 strtok。 但是出现了一些我不理解的错误。 那么我该怎么做呢?
void main(){
int T,N,K,sum_N=0;
int test_arr[N];
char name;
char *token;
scanf("%d",&T);
if(T<0||T>100000) printf("Wrong Input Cases"); // Condition Checking for T
if(sum_N>500000) printf("Exceeded Sum"); //Condition Checking for sum of N
while(T--){
scanf("%d %d",&N,&K);
if((N||K)<0||(N||K)>100000) printf("Wrong Values"); //Conditon Checking for N and K
// Here N Input in one Line are taken
fgets(name,sizeof(name),stdin);
token = strtok(name," ");
for(int i=0;i<N;i++){
test_arr[i] = *(token+i);
}
int ctr=0;
for(int i=0;i<N;i++){
if(test_arr[i]>K) ctr++;
}
printf("%d",ctr);
}
}
你需要问自己几个问题:
如果这两个问题的答案都是no ,那么就没有理由检查或关心一行中的内容与另一行中的内容。 只需使用 scanf 读取数字,不用担心间距或哪一行是什么。
scanf("%d", &test_cases); // number of test cases
for (int i = 0; i < test_cases; ++i) {
scanf("%d%d", &N, &height); // number of values and boundary height
int val[N];
for (j = 0; j < N; ++j)
scanf("%d", &val[j]);
请注意,scanf 格式字符串中永远不会有任何空格或换行符。 您不需要它们,它们可能会造成混乱。 你只读数字。 如果您多疑,可以检查 scanf 的返回值——它应该始终是读取的项目数(上面 3 次调用中的 1、2 或 1),但如果不是,那么您唯一有用的东西能做的就是打印错误信息并退出。
如果您确实需要关心换行符(最常见的原因是您不知道一行中有多少数字),请使用 fgets + sscanf:
char buffer[MAXLINE]; // buffer big enough for the largest line
int vals[MAXVALS]; // array large enough for the maximum number of vals
char *p = fgets(buffer, sizeof(buffer)); // read a line
int N = 0, len;
while (N < MAXVALS && sscanf(p, "%d%n", &vals[N], &len) == 1) {
p += len;
++N; }
更改char name;
char name[1024];
或类似的东西。 char name;
不是字符串而是单个字符。 fgets
和strtok
正在寻找指向字符串的指针,但得到的是字符变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.