C fgets是否有永久解决方案
请告诉我如何正确使用fgets,每次我在循环中获取输入。因为我的for循环只工作一次,然后程序就会中断。我也尝试过使用buffer和getc,但似乎没有任何效果C fgets是否有永久解决方案,c,fgets,C,Fgets,请告诉我如何正确使用fgets,每次我在循环中获取输入。因为我的for循环只工作一次,然后程序就会中断。我也尝试过使用buffer和getc,但似乎没有任何效果 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(void){ int k,i,j,t,n,m; char buffer[100]; f
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void){
int k,i,j,t,n,m;
char buffer[100];
fgets(buffer,100,stdin);
sscanf(buffer,"%d",&t);
while(t--){
char buffer1[100];
fgets(buffer1,100,stdin);
sscanf(buffer1,"%d%d",&n,&m);
char pattern[n+1][m+1];
for(i=0;i<n;i++){
fgets(pattern[i],m,stdin);
}
}
}
/* My OUTPUT:
2
2 3
RGR
GRR
3 4
Process returned 0 (0x0) execution time : 8.106 s
Press any key to continue.
where as I wanted this:
2
2 3
RGR (this is just random input
GRR )
3 4
RRGG (this is just random input
GRRR
RGGG )
*/
#包括
#包括
#包括
内部主(空){
int k,i,j,t,n,m;
字符缓冲区[100];
fgets(缓冲器,100,标准输入);
sscanf(缓冲区、%d、&t);
而(t--){
字符缓冲区1[100];
fgets(buffer1100,stdin);
sscanf(缓冲区1、%d%d、&n和&m);
字符模式[n+1][m+1];
对于(i=0;i,您仍然没有充分保护函数,以便在其中任何一个函数出现故障时能够捕获它。我要说的是检查函数的返回值,并对函数中使用的参数进行少量检查
#include<stdio.h>
#include<stdlib.h>
int main(void){
int t;
char buffer[100];
if( fgets(buffer,100,stdin) == NULL ){
fprintf(stderr, "%s\n", "Input Error using fgets");
exit(1);
}
if( sscanf(buffer,"%d",&t) != 1){
fprintf(stderr, "%s\n", "Input Error using sscanf");
exit(1);
}
if( t < 0 ){
fprintf(stderr, "%s\n","Error in inputting t" );
exit(1);
}
while(t--){
char buffer1[100];
if( fgets(buffer,100,stdin) == NULL ){
fprintf(stderr, "%s\n", "Input Error using fgets");
exit(1);
}
int n,m;
if( sscanf(buffer1,"%d%d",&n,&m) == 2){
fprintf(stderr, "%s\n", "Input Error using sscanf");
exit(1);
}
if(!( n && m) ){
fprintf(stderr, "%s\n", "Error in input n,m" );
exit(1);
}
char pattern[n+1][m+1];
for(size_t i=0;i<n;i++){
if( fgets(pattern[i],m,stdin)== NULL){
fprintf(stderr, "%s\n","Error in input" );
exit(1);
}
}
}
return 0;
}
#包括
#包括
内部主(空){
int t;
字符缓冲区[100];
如果(fgets(缓冲区,100,标准输入)=NULL){
fprintf(stderr,“%s\n”,“使用fgets输入错误”);
出口(1);
}
如果(sscanf(缓冲区、%d、&t)!=1){
fprintf(stderr,“%s\n”,“使用sscanf时输入错误”);
出口(1);
}
if(t<0){
fprintf(stderr,“%s\n”,“输入t时出错”);
出口(1);
}
而(t--){
字符缓冲区1[100];
如果(fgets(缓冲区,100,标准输入)=NULL){
fprintf(stderr,“%s\n”,“使用fgets输入错误”);
出口(1);
}
int n,m;
如果(sscanf(缓冲区1、%d%d、&n、&m)==2){
fprintf(stderr,“%s\n”,“使用sscanf时输入错误”);
出口(1);
}
如果(!(n&m)){
fprintf(stderr,“%s\n”,“输入错误n,m”);
出口(1);
}
字符模式[n+1][m+1];
对于(size_t i=0;i请参见。您面临的问题是什么?并且您没有检查任何内容的返回值。请始终检查scanf和fgets的返回值。scanf的结果实际上可能会让您感到惊讶。您确实需要在模式中的%d之间设置分隔符。基本调试技术:检查返回值(特别是从输入函数),并打印出正在进行的操作(或使用调试器)。另请参阅。当问题陈述只是“它不工作”时,很难提供解决方案。请您的问题更完整地描述您预期会发生的情况,以及与实际结果的差异。请参阅,以获取有关什么是好的解释的提示。