当前位置:网站首页>Problem: the string and characters are typed successively, and the results conflict

Problem: the string and characters are typed successively, and the results conflict

2022-07-07 11:59:00 CodeQingqing

Software environment

Microsoft Visual Studio 2010
edition 10.0.40219.1 SP1Rel

Simplify the problem

Add the following code to the project :

#include <stdio.h>
#define NameLength 10
int main()
{
    
	char temp;
	char name[NameLength];

	printf(" Input name:");
	scanf("%d", name);
	printf(" Input temp:");
	scanf("%c", &temp);

	printf("name=%s\n", name);
	printf("temp=%c\n", temp);

	return 0;
}

The operation results are as follows : Input name when , type “ Li ”, And then line break
 Insert picture description here
Debug View related variable values :
 Insert picture description here
adopt Baidu ASCII code You know :temp The value of is a newline

analysis

scanf and printf Functions read data from the data stream , For the spacer after the typed data ( In this case, the newline character ),scanf Function will put it back into the input stream , namely : The next time scanf When the function reads input , The first thing to read is , Last read was scanf The function discards the spacer .

This can explain Debug when ,temp The value of is the newline character

Next, expand the situation in the problem , If it is , The running results are different :

  • The situation in the question is to use scanf Function to type a string , After use scanf Function to type a single character : The operation result is abnormal , The value of the character is the spacer .
  • Use twice scanf Function to type a single character : The operation result is abnormal , The value of the second character is the spacer .
  • Use twice scanf Function to type a string : Operation result is normal

Suggest

It can be seen from the analysis that , In different cases , The spacer has different effects on the running results . therefore , As the first step to solve the problem , The compiler should be used flexibly Debug function , By looking at the values of related variables , So as to find out whether the spacer has an impact on the final running result .

If Debug after , It is found that the spacer has an impact on the final running result , Then go to the second step to solve the problem .

At present, there is no code similar to formula template , I tried a lot demo, I also learned the method in the reference link , There are many strange ways to find specific implementation methods , But the core of implementation is to solve scanf Function discards the spacer .

therefore , Recommendations are as follows :

  • Try not to type characters 、 The statements that type strings are adjacent , Otherwise, it is easy to have problems ;
  • Type the string with gets function , Type a single character with getchar function ;
  • You can study a piece of code logic by yourself , Take countermeasures against the spacer .

Reference link

scanf About %c The problem of
scanf Function use %s Precautions for parameters
scanf How exactly does the function read numbers ?

原网站

版权声明
本文为[CodeQingqing]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207071002321145.html