为什么getchar()不';但getchar_unlocked()在读取字符串时是否在主函数之外工作?
在read()函数中,当我使用getchar()时,它只读取一个字符。即使while()中的条件为true,但getchar\u unlocked()读取字符直到给定条件失败,它也会中断循环 代码用于计算最大值,如:为什么getchar()不';但getchar_unlocked()在读取字符串时是否在主函数之外工作?,c,string,getchar,C,String,Getchar,在read()函数中,当我使用getchar()时,它只读取一个字符。即使while()中的条件为true,但getchar\u unlocked()读取字符直到给定条件失败,它也会中断循环 代码用于计算最大值,如: input : 4 8-6+2+4+3-6+1 1+1+1+1 2+3+6+8-9 2+7+1-6 output : 10 //(which is max value of 3rd string) 代码: #包括 内联整数读取(整数*值){ 字符c,c1='+'; *数值=0
input :
4
8-6+2+4+3-6+1
1+1+1+1
2+3+6+8-9
2+7+1-6
output :
10 //(which is max value of 3rd string)
代码:
#包括
内联整数读取(整数*值){
字符c,c1='+';
*数值=0;
c=getchar_unlocked();
而((c>='0'&&c max?val:max;
}
printf(“%d”,最大值);
返回0;
}
以下建议的代码:
#include <stdio.h> // scanf(), getchar()
#include <limits.h> // INT_MIN
#include <ctype.h> // isdigit()
#include <stdlib.h> // exit(), EXIT_FAILURE
inline int myRead( void )
{
int c;
char c1 = '+';
int value = 0;
while( (c = getchar()) != EOF && '\n' != c )
{
if (c == '+' || c == '-')
c1 = (char)c;
else if( isdigit( c ) )
value = (c1=='+' ? value + (c-'0') : value - (c-'0'));
}
return value;
}
int main( void )
{
int n;
int max = INT_MIN;
int val;
if( 1 != scanf("%d", &n) )
{
fprintf( stderr, "scanf for number of following lines failed" );
exit( EXIT_FAILURE );
}
// implied else, scanf successful
while(n--)
{
val = myRead();
max = val>max?val:max;
}
printf("%d\n", max);
return 0;
}
printf()
,以便数据立即显示在终端上#include <stdio.h> // scanf(), getchar()
#include <limits.h> // INT_MIN
#include <ctype.h> // isdigit()
#include <stdlib.h> // exit(), EXIT_FAILURE
inline int myRead( void )
{
int c;
char c1 = '+';
int value = 0;
while( (c = getchar()) != EOF && '\n' != c )
{
if (c == '+' || c == '-')
c1 = (char)c;
else if( isdigit( c ) )
value = (c1=='+' ? value + (c-'0') : value - (c-'0'));
}
return value;
}
int main( void )
{
int n;
int max = INT_MIN;
int val;
if( 1 != scanf("%d", &n) )
{
fprintf( stderr, "scanf for number of following lines failed" );
exit( EXIT_FAILURE );
}
// implied else, scanf successful
while(n--)
{
val = myRead();
max = val>max?val:max;
}
printf("%d\n", max);
return 0;
}
#包括//scanf(),getchar()
#包括//INT\u MIN
#include//isdigit()
#包括//退出(),退出失败
内联int myRead(void)
{
INTC;
字符c1='+';
int值=0;
而((c=getchar())!=EOF&&'\n'!=c)
{
如果(c=='+'| | c=='-')
c1=(char)c;
否则,如果(i数字(c))
value=(c1='+'?value+(c-'0'):value-(c-'0');
}
返回值;
}
内部主(空)
{
int n;
int max=int_MIN;
int-val;
如果(1!=scanf(“%d”、&n))
{
fprintf(stderr,“扫描以下失败行数”);
退出(退出失败);
}
//否则,scanf将成功
而(n--)
{
val=myRead();
max=val>max?val:max;
}
printf(“%d\n”,最大值);
返回0;
}
以下建议的代码:
#include <stdio.h> // scanf(), getchar()
#include <limits.h> // INT_MIN
#include <ctype.h> // isdigit()
#include <stdlib.h> // exit(), EXIT_FAILURE
inline int myRead( void )
{
int c;
char c1 = '+';
int value = 0;
while( (c = getchar()) != EOF && '\n' != c )
{
if (c == '+' || c == '-')
c1 = (char)c;
else if( isdigit( c ) )
value = (c1=='+' ? value + (c-'0') : value - (c-'0'));
}
return value;
}
int main( void )
{
int n;
int max = INT_MIN;
int val;
if( 1 != scanf("%d", &n) )
{
fprintf( stderr, "scanf for number of following lines failed" );
exit( EXIT_FAILURE );
}
// implied else, scanf successful
while(n--)
{
val = myRead();
max = val>max?val:max;
}
printf("%d\n", max);
return 0;
}
printf()
,以便数据立即显示在终端上#include <stdio.h> // scanf(), getchar()
#include <limits.h> // INT_MIN
#include <ctype.h> // isdigit()
#include <stdlib.h> // exit(), EXIT_FAILURE
inline int myRead( void )
{
int c;
char c1 = '+';
int value = 0;
while( (c = getchar()) != EOF && '\n' != c )
{
if (c == '+' || c == '-')
c1 = (char)c;
else if( isdigit( c ) )
value = (c1=='+' ? value + (c-'0') : value - (c-'0'));
}
return value;
}
int main( void )
{
int n;
int max = INT_MIN;
int val;
if( 1 != scanf("%d", &n) )
{
fprintf( stderr, "scanf for number of following lines failed" );
exit( EXIT_FAILURE );
}
// implied else, scanf successful
while(n--)
{
val = myRead();
max = val>max?val:max;
}
printf("%d\n", max);
return 0;
}
#包括//scanf(),getchar()
#包括//INT\u MIN
#include//isdigit()
#包括//退出(),退出失败
内联int myRead(void)
{
INTC;
字符c1='+';
int值=0;
而((c=getchar())!=EOF&&'\n'!=c)
{
如果(c=='+'| | c=='-')
c1=(char)c;
否则,如果(i数字(c))
value=(c1='+'?value+(c-'0'):value-(c-'0');
}
返回值;
}
内部主(空)
{
int n;
int max=int_MIN;
int-val;
如果(1!=scanf(“%d”、&n))
{
fprintf(stderr,“扫描以下失败行数”);
退出(退出失败);
}
//否则,scanf将成功
而(n--)
{
val=myRead();
max=val>max?val:max;
}
printf(“%d\n”,最大值);
返回0;
}
只有在多线程程序中才会出现getchar()和getchar\u unlocked()
之间的差异。否则,它们的行为相同。因此,您的诊断似乎不可能和/或不可信。请确定您使用的平台(o/s和编译器)。请注意编写函数read()
在POSIX程序中如履薄冰。getchar
和getchar\u unlocked
都返回int
,而不是char
(这不是你的问题,但是养成使用int
的习惯很好),以便于可读性和理解:1)单独的代码块(for、if、else、while、do…while、switch、case、default)通过一个空行。2)用2或3个空行分隔函数(保持一致)3)遵循公理:每行只有一条语句,每语句(最多)一条变量声明。函数:getchar()
(及其“相对:getchar\u unlocked()
)读取输入流中的每个字符。包括空格、制表符、换行符等。发布的代码试图将这些非数字字符视为数字。这意味着代码失败。您可能希望使用#include
和工具isdigit()
调用任何scanf()
函数族时,始终检查返回值(而不是参数值)以确保操作成功只有在getchar()之间存在差异时
和getchar\u unlocked()
位于多线程程序中。否则,它们的行为相同。因此,您的诊断似乎不太可能和/或不可信。请确定您正在使用的平台(o/s和编译器)。请注意,在POSIX程序中编写函数read()
是如履薄冰。getchar
和getchar\u unlocked
都返回int
,而不是char
。(这不是你的问题,但是养成使用int
的习惯是很好的)为了便于阅读和理解:1)通过一个空行分离代码块(例如,if,else,while,do…while,switch,case,default)。2) 用2或3个空行分隔函数(保持一致)3)遵循公理:每行只有一条语句,每语句最多一条变量声明。函数:getc